用Java中的PBKDF2进行密码验证

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (63)

我在Java中使用基于密码的文件加密; 我使用AES作为底层加密算法,PBKDF2WithHmacSHA1并使用以下代码(我从本网站上的另一个慷慨海报获得)从盐和密码组合中派生密钥。

SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec ks = new PBEKeySpec(password,salt,1024,128);
SecretKey s = f.generateSecret(ks);
Key k = new SecretKeySpec(s.getEncoded(),"AES");

我分享盐,用户在每一端输入他们的密码,加密和解密工作正常:-)我的问题是,我希望能够验证用户输入的密码是正确的,然后开始(可能很长)解密过程。我知道PBKD规范包含一个可选的2字节验证值,但我不确定如何使用上述方法生成此值。Java是否提供对此的支持,或者如果不是,那么这将是一个安全的选择?

提问于
用户回答回答于

在做了一些挖掘之后,我决定使用Gladmans博士文件加密页面上描述的方法来进行密码验证和消息验证。我相信这种基于PBKDF2和MAC的方法可以使得密码足够昂贵以确保密码的正确性。再次感谢,我希望这个解决方案可以帮助其他人。

用户回答回答于

根据定义,没有“快速检查”机制是安全的。使用PBKDF2或相关技术的重点在于使密码检查变得缓慢,以防止密码破解程序。如果您添加了快速检查系统,密码破解程序将能够快速猜测密码。

扫码关注云+社区