解密前检查密码

时间:2010-07-23 11:27:03

标签: c++ passwords encryption

我正在编写小程序(C ++)来加密/解密文件。在解密之前,我想检查用户提供的密码是否正确。我的想法:

  • 在文件开头添加一些字符串(例如:“GOOD”);
  • 加密文件
  • 解密时首先解密文件的开头并检查“GOOD”字符串

这是对的吗?

5 个答案:

答案 0 :(得分:8)

加密的主要建议:不要自己实现。那里有很多excellent libraries

您建议提供backdoor (crib)来破解加密。甚至experts在设计加密时也会出错(更不用说密钥管理了!)。

(当然不是,我建议布鲁斯会ever get things wrong!)

答案 1 :(得分:4)

我建议使用某种类型的校验和,而不是“好”的字符串,例如MD5,CRC,SHA256等。这个校验和将从文件的前几个字节(例如128)计算。 / p>

无论如何,使用现有的加密库是一个更好的主意。

答案 2 :(得分:3)

您可以考虑在开头存储一些文件的哈希函数,例如MD5。

答案 3 :(得分:2)

拥有已知的加密值将有助于破解者找出您的加密密钥。

答案 4 :(得分:1)

更好的是:使用散列(例如SHA256)来加密文件本身(例如使用AES256),并将明文文件的散列(可以是任何内容,甚至是简单的CRC)附加到加密文件。

要破译:

  • 向用户提出密码
  • 使用SHA256
  • 散列密码
  • 使用密码哈希作为密钥解密文件
  • 计算解密文件的CRC
  • 如果计算的CRC与密文之后附加的CRC匹配,则密码是正确的。如果它们不匹配,密钥就不好了,你破解了垃圾,这意味着密码不好。

作为奖励,不需要在某处保留“秘密”密钥,它都是自包含的。加上暴力/字典攻击很痛苦,因为每次尝试检查CRC时都必须破译整个文件。