相关疑难解决方法(0)

如何实现单个文件的密码保护?

我正在编写一个小桌面应用程序,它应该能够加密数据文件并用密码保护它(即必须输入正确的密码才能解密).我希望加密数据文件是自包含和可移植的,因此必须将身份验证嵌入到文件中(或者我假设).

我有一个看似可行的策略,看起来很合理,基于我所知道的(这可能只是危险),但我不知道它是否真的是一个好的设计.那么告诉我:这是疯了吗?有更好/最好的方法吗?

  • 第1步:用户输入纯文本密码,例如"MyDifficultPassword"
  • 步骤2:App哈希用户密码并使用该值作为对称密钥来加密/解密数据文件.例如"MyDifficultPassword" - >"HashedUserPwdAndKey".
  • 步骤3:App散列来自步骤2的散列值,并将新值保存在数据文件头(即数据文件的未加密部分)中,并使用该值验证用户的密码.例如"HashedUserPwdAndKey" - >"HashedValueForAuthentication"

基本上我是从实现网站密码的常用方法推断出来的(当你没有使用OpenID时),即在你的数据库中存储用户密码的(盐渍)哈希,而不是保存实际的密码.但由于我使用散列用户密码作为对称加密密钥,因此我无法使用相同的值进行身份验证.所以我再次哈希,基本上把它当作另一个密码处理,并将双重哈希值保存在数据文件中.这样,我可以将文件带到另一台PC,只需输入我的密码即可解密.

那么这个设计是合理安全的,还是绝望的天真,或介于两者之间?谢谢!

编辑:澄清和后续问题re:盐.
我认为盐必须保密才有用,但你的答案和链接暗示情况并非如此.例如,由erickson(下面)链接的这个规范说:

因此,这里定义的基于密码的密钥推导是密码,盐和迭代计数的函数,其中后两个量不需要保密.

这是否意味着我可以将盐值存储在与散列键相同的位置/文件中,并且仍然比在散列时根本不使用盐时更安全?这是如何运作的?

更多上下文:加密文件不是为了与他人共享或解密,它实际上是单用户数据.但是我想将它部署在我无法完全控制的计算机上的共享环境中(例如在工作中),并且能够通过简单地复制文件来迁移/移动数据(所以我可以在家里,在不同的地方使用它工作站等).

encryption passwords cryptography

21
推荐指数
1
解决办法
7204
查看次数

标签 统计

cryptography ×1

encryption ×1

passwords ×1