【发布时间】:2011-03-20 01:29:10
【问题描述】:
我正在编写小程序 (C++) 来加密/解密文件。在解密之前,我想检查用户提供的密码是否正确。我的想法:
- 在文件开头添加一些字符串(例如:“GOOD”);
- 加密文件
- 解密时首先解密文件的开头并检查“GOOD”字符串
这是正确的吗?
【问题讨论】:
标签: c++ passwords encryption
我正在编写小程序 (C++) 来加密/解密文件。在解密之前,我想检查用户提供的密码是否正确。我的想法:
这是正确的吗?
【问题讨论】:
标签: c++ passwords encryption
关于加密的主要建议:不要自己实施。那里有很多excellent libraries。
您的建议提供了一个backdoor (crib) 来破解您的加密。即使experts 在设计加密时也会出错(更不用说密钥管理了!)。
(当然,我不是建议布鲁斯ever get things wrong!)
【讨论】:
我建议使用某种校验和,而不是“好”字符串,例如 MD5、CRC、SHA256 等。此校验和将从文件的前几个字节(例如 128)计算。
无论如何,使用现有的加密库是一个更好的主意。
【讨论】:
您可以考虑在开头存储文件的一些哈希函数,例如MD5。
【讨论】:
拥有一个已知的加密值将有助于破解者找出您的加密密钥。
【讨论】:
更好的是:使用哈希(例如 SHA256)对文件本身进行加密(例如使用 AES256),并将明文文件的哈希(可以是任何东西,甚至是简单的 CRC)附加到加密文件。
破译:
作为奖励,无需在某处保留“秘密”密钥,它都是独立的。此外,暴力破解/字典攻击很痛苦,因为每次尝试检查 CRC 时,您都必须破译整个文件。
【讨论】: