用于 JAVA 的 PBKDF2-HMAC-SHA256 的可靠实现

2022-09-01 15:00:03

2019年更新:自弹跳城堡1.60起,弹跳城堡现在支持PBKDF2-HMAC-SHA256


有没有可靠的 JAVA PBKDF2-HMAC-SHA256 实现?

我曾经使用弹跳城堡加密,但它不提供PBKDF2WithHmacSHA256'。

我不想自己编写加密模块。

你能推荐任何替代库或算法(如果我可以坚持使用弹跳城堡)

(以下是弹跳城堡支持的算法)http://www.bouncycastle.org/specifications.html


答案 1

直接使用弹跳城堡类:

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();
}

推荐