使用 Java 中的 PBKDF2 进行密码验证

2022-09-02 10:51:43

我正在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是否为此提供支持,或者如果不是,那么什么是安全的替代方案?

感谢您抽出宝贵时间接受采访。


答案 1

根据定义,没有安全的“快速检查”机制。使用PBKDF2或相关技术的全部意义在于使密码检查变慢,以阻止密码破解程序。如果您添加了一个快速检查系统,密码破解者将能够非常快速地批量猜测密码。


答案 2

嘿,感谢疯狂的苏格兰人和克里斯的帮助。经过一些挖掘后,我决定使用Dr Gladmans文件加密页面上描述的方法进行密码验证和消息身份验证。我相信这种方法基于PBKDF2和MAC,使得派生m密码的验证值足够昂贵,使其安全。再次感谢,我希望这个解决方案可以帮助其他人。


推荐