package me.test; import java.security.MessageDigest; import java.util.Arrays; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class GenAESKey { public static void main(String[] args) throws Exception { SecretKey key = null; key = getSecretKeyBaseOnUserPassword("123", 128); System.out.println(Arrays.toString(key.getEncoded())); System.out.println(Arrays.toString(key.getEncoded())); } private static SecretKey getSecretKeyBaseOnUserPassword( String userPassword, int keySize) { try { // AES 的密码长度有 128, 192, 256 三种,故在选择满足其最大长度的摘要算法。 // 注意:如果要使用 256 位的AES,需要下载 JCE MessageDigest digester = MessageDigest.getInstance("SHA-256"); byte[] digest = digester.digest(userPassword.getBytes("UTF-8")); byte[] key = new byte[keySize / 8]; System.arraycopy(digest, 0, key, 0, keySize / 8); return new SecretKeySpec(key, "AES"); } catch (Exception e) { throw new RuntimeException(e); } } }