我正在尝试将128 AES加密转换为java中的256.Previously我使用的126并且工作正常,但我要将加密升级到256.这是我以前用于128的代码< / p>
private Key generateKey() throws Exception {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
char[] password = listOfDecodedkeys.get(1).toCharArray();
byte[] salt = listOfDecodedkeys.get(2).getBytes(AbstractSecurity.UTF_ENCODING);
KeySpec spec = new PBEKeySpec(password, salt, 65536, 128);
SecretKey tmp = factory.generateSecret(spec);
byte[] encoded = tmp.getEncoded();
return new SecretKeySpec(encoded, "AES");
}
我现在正在使用
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
我也将keySpec更改为256
KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);
但是当我试图运行时,我收到了NoSuchAlgorithmException异常。这是完整的堆栈跟踪
Exception in thread "main" java.security.NoSuchAlgorithmException: PBKDF2WithHmacSHA256 SecretKeyFactory not available
at javax.crypto.SecretKeyFactory.<init>(Unknown Source)
at javax.crypto.SecretKeyFactory.getInstance(Unknown Source)
at com.aes.security.AbstractSecurity.generateKey(AbstractSecurity.java:193)
at com.aes.security.AbstractSecurity.getCipher(AbstractSecurity.java:182)
at com.aes.security.SecurityService.encrypt(SecurityService.java:76)
at com.aes.security.SecurityService.main(SecurityService.java:165)
请帮助我不熟悉加密。
答案 0 :(得分:0)
JRE / JDK的标准版本受出口限制。这还包括不允许在标准版本中提供某些加密算法。
对于那些被允许使用更强大的加密技术的人来说,有Java Cryptography Extensions。如果您将这些安装到您的JRE / JDK,您也可以使用例如带有256位密钥的AES。
编辑:更好地解释为什么要安装JCE。