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

Encryption 如何在基于密码的加密中处理salt,encryption,passwords,Encryption,Passwords,我正在学习正确的crytographic实现,我想作为练习,我会创建一个加密文本编辑器 我的第一次尝试使用了用户提供的密码的SHA-512散列作为密钥,它运行得很好。虽然我将IV存储在文件头中,但没有受到保护,这让我很担心 然后我在stackoverflow上读到,我应该使用SecretKeyFactory,我使用Java做PBE,现在我还需要提供一个salt。所以现在我也将盐储存在标题中,但这似乎破坏了盐的全部用途。那么这是怎么回事?当我让Alice在保存文件时为她的文件选择密码时,我是否应该

我正在学习正确的crytographic实现,我想作为练习,我会创建一个加密文本编辑器

我的第一次尝试使用了用户提供的密码的SHA-512散列作为密钥,它运行得很好。虽然我将IV存储在文件头中,但没有受到保护,这让我很担心

然后我在stackoverflow上读到,我应该使用SecretKeyFactory,我使用Java做PBE,现在我还需要提供一个salt。所以现在我也将盐储存在标题中,但这似乎破坏了盐的全部用途。那么这是怎么回事?当我让Alice在保存文件时为她的文件选择密码时,我是否应该在这里说,记住这个随机数以及您的密码。?我希望生成的文件能够通过电子邮件发送给Bob,因此盐不能在本地存储

就我的应用程序而言,静脉注射和盐是公开的。我想让我的用户只需要知道密码,当他们发送他们的文件给鲍勃,而保持加密安全,但我找不到任何这样做的例子


谢谢你的帮助

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

有很多方法可以从密码短语创建密钥和IV,但其中一种更常见的方法涉及SHA-1,在一种考虑了一些salt和其他因素的算法中,构建一个充分位混合的密钥和IV

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