Надежная реализация PBKDF2-HMAC-SHA256 для JAVA

Есть ли надежная реализация PBKDF2-HMAC-SHA256 для JAVA?

Я использовал для шифрования с помощью bouncycastle, но он не предоставляет PBKDF2WithHmacSHA256 '.

Я не хочу писать криптовый модуль самостоятельно.

Не могли бы вы порекомендовать любую альтернативную библиотеку или алгоритм (если я могу придерживаться bouncycastle)

(вот алгоритмы, которые поддерживает bouncycastle) http://www.bouncycastle.org/specifications.html

Ответ 1

Использование классов BouncyCastle напрямую:

PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());
gen.init("password".getBytes("UTF-8"), "salt".getBytes(), 4096);
byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey();

Ответ 2

Он доступен на Java 8:

public static byte[] getEncryptedPassword(String password, byte[] salt,  int iterations,  int derivedKeyLength) throws NoSuchAlgorithmException, InvalidKeySpecException {
    KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, derivedKeyLength * 8);

    SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

    return f.generateSecret(spec).getEncoded();
}