我有一个桌面应用程序,其中用户有一个加密的ZIP文件库。配置文件包含用于解密这些ZIP的主密码。这个想法是用户输入他们在安装应用程序时选择的程序密码来打开程序,并且该密码用于解密存储在配置文件中的主密码。
所有这些安全性的要点是即使有人访问了硬盘和用户的Windows帐户,理想情况下,他们仍然无法在没有密码的情况下进入ZIP文件。
要验证用户输入的程序密码我在这里使用C#哈希码(转换为VB)(在页面底部):
http://crackstation.net/hashing-security.htm
到目前为止一切顺利。我们只存储程序密码的哈希值,因此黑客无法通过查看配置文件来读取它。
现在,我正在尝试实现此处的加密:
http://msdn.microsoft.com/en-us/library/yx129kfs.aspx
实际问题:
那么以下哪一项作为纯文本存储在配置文件中,用于在运行时使用用户输入的程序密码解密ZIP主密码?
用于生成加密密钥的盐(可以与之相同) 用于哈希密码的盐如上所述?)
初始化向量(IV)?
加密密钥? (可能不是......)(在MS的例子中为k1)
解密密钥? (在MS的例子中为k2)
在MS的例子中,他们加密和解密都混在一起......我有很多东西,但我不知道怎么把它们放在一起......
更新
我读过AES加密比MS在上面的示例中使用的Triple DES加密更安全。看到我们在zip文件上使用AES,也可以使用AES作为ZIP文件密码。
那么,我该如何结合这个AES示例:
用PBKDF2生成加密密钥?
答案 0 :(得分:1)
您需要存储PBKDF函数的salt和迭代计数(该函数不能与用于散列密码的盐相同)。
密钥是PBKDF的结果,对于给定的盐和迭代计数,它是固定的。
您还需要存储IV 如果您愿意,可以使用第三个(存储的)盐作为IV来使用密码的(PBKDF)哈希值。