KeySpec抛出“找不到盐”-不需要盐

时间:2018-06-26 16:40:47

标签: java exception encryption passwords

我目前正在处理一小段代码,应该在将byte []存储到文件之前对其进行加密。在以下代码段中,我尝试使用PBKDF2从密码生成SecretKey。

public SecretKey deriveKey(String password)
        throws NoSuchAlgorithmException, InvalidKeySpecException {
    SecretKeyFactory kf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec specs = new PBEKeySpec(password.toCharArray());
    SecretKey key = kf.generateSecret(specs);
    return key;
}

这引发异常

  

java.security.spec.InvalidKeySpecException:找不到盐

在return语句之前的最后一行。对我来说,这似乎很令人困惑,因为PBEKeySpec明确不需要任何其他参数,如here所示。

这不是悲剧,无论如何我还是要在以后加盐,甚至在上面已经定义好了,但我很好奇是否有人知道为什么会这样。我可能正在做一些非常错误的事情,只是没有注意到。

1 个答案:

答案 0 :(得分:2)

与PBEKeySpec类是否需要盐无关。算法PBKDF2 需要盐。该API是一种通用api,应满足多种算法,其中某些可能会在将来定义。