Encryption 使用加密的AES加密++;要比较的密码

Encryption 使用加密的AES加密++;要比较的密码,encryption,Encryption,我不确定这是不是该问的地方 Im使用AES crypto++对数据进行加密/解密。基本上它就像一个加密的笔记 我想做的是有一个标识符字段。此字段将包含加密的用户密码: User Password: smith Identifier = AESEncrypt("smith") 这只执行一次,因为标识符字段为空。 每次用户输入密码添加注释时,我都可以解密标识符字段,并将其与用户输入的密码进行比较 原因是为了避免由于输入了错误的密码而损坏便笺 这是个好主意吗?我想如果有人破坏了标识符并获得了密码,那

我不确定这是不是该问的地方

Im使用AES crypto++对数据进行加密/解密。基本上它就像一个加密的笔记

我想做的是有一个标识符字段。此字段将包含加密的用户密码:

User Password: smith
Identifier = AESEncrypt("smith")
这只执行一次,因为标识符字段为空。 每次用户输入密码添加注释时,我都可以解密标识符字段,并将其与用户输入的密码进行比较

原因是为了避免由于输入了错误的密码而损坏便笺


这是个好主意吗?我想如果有人破坏了标识符并获得了密码,那么他们无论如何都已经知道了密码。对我的想法有什么看法?

不,这不是个好主意。如果两个人拥有相同的密码,那么他们将拥有相同的标识符。这使得破解密码更加简单。您也不清楚使用什么密钥加密密码
AESEncrypt()
接受两个参数,密钥需要与随机密钥无法区分才能安全

密码在与AES一起使用之前必须转换为密钥。要将密码转换为密钥,可以使用KDF(密钥派生函数)。最著名和最广泛使用的是PBKDF2。其他包括bcrypt和scrypt。在Crypto++中,您应该使用

实际上验证密码比听起来要复杂。使用AES无法确保密码正确。使用PKCS#7填充(CBC模式的标准),您可以获得99.6%的密码正确性,但您仍然会偶尔失败,并返回错误密码的胡言乱语,而不是错误。(这不是一个虚构的“接近100%”的数字;我的确切意思是“略小于255/256。”)在解密所有数据之前,您也无法检查填充是否正确

有几种更好的技术可以使用。首先,在任何情况下都应该使用HMAC。HMAC就像加密的散列。它确保加密的便笺未被修改。Crypto++提供了一个。如果您使用错误的密码解密,HMAC将失败,您可以使用它来断言密码是错误的。这种方法的问题是,如果数据非常大,那么速度会很慢,而且您无法区分损坏的数据和错误的密码。(这是目前使用的方法。)


方法是使用HMAC创建一个验证器。获取一些已知的字符串,然后使用您的密钥(由PBKDF2生成)对其进行HMAC。稍后,您可以在这个小的已知字符串上验证HMAC,而不是整个正文文本。既然您知道字符串应该是什么,就不必担心数据损坏。链接页面给出了我目前对确切布局的想法。

我甚至没有想到两个不同的人拥有相同的密码。谢谢你提供的有用的建议,我一定会研究的