我们使用PBKDF2算法散列密码,使用SecretKeyFactory.generateSecret
功能,像这样:SecretKeyFactory.generateSecret与InvalidKeySpecException死在IBM的Java
final SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
final PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, iterations, hashLength);
final SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
return secretKey.getEncoded();
一切似乎都做工精细,但在生产服务器上,当它在IBM的Java运行时,它死与java.security.spec.InvalidKeySpecException
:无法生成密钥:
Caused by: java.security.spec.InvalidKeySpecException: Could not generate secret key
at javax.crypto.SecretKeyFactory.generateSecret(Unknown Source)
at our.Implementation.doHash(Hasher.java:71)
... 48 more
Caused by: java.lang.RuntimeException: Error deriving PBKDF2 keys
at com.ibm.crypto.provider.PBKDF2KeyImpl.a(Unknown Source)
at com.ibm.crypto.provider.PBKDF2KeyImpl.<init>(Unknown Source)
at com.ibm.crypto.provider.PBKDF2HmacSHA1Factory.engineGenerateSecret(Unknown Source)
... 50 more
我们试图改变迭代次数,生成散列的大小,T他盐的大小,但没有任何帮助。我究竟做错了什么?