Мы хэшируем пароль с помощью алгоритма PBKDF2, используя SecretKeyFactory.generateSecret
, например:
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
Мы пытались изменить количество итераций, размер сгенерированного хеша и размер соли, но ничего не помогло. Что я делаю неправильно?