我正在使用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对此提供支持吗?如果不支持,那么什么是安全的替代方案?
耽误您时间,实在对不起。
发布于 2010-03-07 02:19:21
感谢疯狂的scot和Chris的帮助。在深入研究之后,我决定使用Dr Gladmans file encryption page中描述的方法来进行密码验证和消息身份验证。我相信这种基于PBKDF2和MAC的方法使得为密码m导出验证值的成本足够高,从而使其变得安全。再次感谢,我希望这个解决方案能对其他人有所帮助。
发布于 2010-03-04 06:56:38
根据定义,没有安全的“快速检查”机制。使用PBKDF2或相关技术的全部目的是使密码检查变慢,从而挫败密码破解程序。如果你添加了一个快速检查系统,密码破解者将能够非常迅速地批量猜测密码。
发布于 2010-03-04 06:57:15
计算某种类型的密码验证标签,并将其与加密的文件数据一起存储,以便您可以首先进行检查。这可能类似于固定(短)字符串的PBMAC。当然,这需要是一个不可逆的函数,这样黑客就不能确定密码,也不能太快地计算以混淆暴力破解攻击。
您是否考虑过是否(以及如何)检测整个文件是否已正确解密?您可能应该研究一下PBES2和PBMAC的组合,而不是直接使用AES。
https://stackoverflow.com/questions/2375541
复制相似问题