如何在基于密码的加密中处理salt

时间:2011-10-06 15:13:17

标签: encryption passwords

我正在学习如何进行适当的加密实现,我认为这是一个练习,我会创建一个加密的文本编辑器。

我的第一次尝试使用用户提供的密码的SHA-512哈希作为密钥,它运行正常。虽然我将IV存储在文件的标题中,但是没有受到保护,让我很担心。

然后我读了stackoverflow,我应该使用SecretKeyFactory(我正在使用Java)来做PBE,现在我还需要提供一个盐。所以现在我也将盐储存在标题中,但这似乎破坏了盐的全部目的。那应该怎么做呢?当我爱丽丝保存时为她的文件选择密码时,我应该说“在这里,记下这个随机数和你的密码。”?我希望生成的文件能够通过电子邮件发送给Bob,因此无法在本地存储盐。

正如我的应用程序所示,IV和盐都是公开的。我希望我的用户只需要在将文件发送给Bob时知道密码,同时保持加密安全,但我找不到任何关于如何完成此操作的示例。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

将IV与数据一起存储是安全的,即使用IV的方式。你的方法还可以,选择一个分组密码,使用密码块链接和一个IV,你就离开了。

答案 1 :(得分:0)

有许多方法可以通过密码来创建密钥和iv,但其中一个更常见的方法是使用SHA-1 HMAC,在算法中考虑一些盐和其他因素来构建一个足够混合的密钥和iv。

技术标准是PKCS#5 v2.0 PBKDF2算法,OpenSSL实现了一个可以做到这一点的方法的C接口,但据我所知,没有命令行方法。