检查用户是否使用了错误的密钥进行解密

时间:2015-01-23 11:22:49

标签: java encryption aes

我使用128位AES加密数据(通过this示例)并将其写入文件。 如果在解密时输入了错误的密钥,我会收到java.io.StreamCorruptedException,用于通知用户他们的密钥不正确。

是否有更好(不太模糊)的方法来检查用户是否输入了错误的密钥?

1 个答案:

答案 0 :(得分:0)

如果您愿意将MAC(例如HMAC)或加密数据的校验和添加到文件中,您可以区分损坏的数据和无效的密钥/密码。这样一个"标签"应该添加为文件的第一个字节,以便可以读取它们然后用于验证剩余数据。应在将数据传递给解密之前完成此验证。

请注意,恶意用户可能会更改密文和校验和,使其仍能正确验证,但会产生错误的明文。即使您使用HMAC,恶意用户也可以对您的应用程序进行逆向工程以获取HMAC的密钥并随意更改密文。但这取决于你的攻击模型。