我使用128位AES加密数据(通过this示例)并将其写入文件。 如果在解密时输入了错误的密钥,我会收到java.io.StreamCorruptedException,用于通知用户他们的密钥不正确。
是否有更好(不太模糊)的方法来检查用户是否输入了错误的密钥?
答案 0 :(得分:0)
如果您愿意将MAC(例如HMAC)或加密数据的校验和添加到文件中,您可以区分损坏的数据和无效的密钥/密码。这样一个"标签"应该添加为文件的第一个字节,以便可以读取它们然后用于验证剩余数据。应在将数据传递给解密之前完成此验证。
请注意,恶意用户可能会更改密文和校验和,使其仍能正确验证,但会产生错误的明文。即使您使用HMAC,恶意用户也可以对您的应用程序进行逆向工程以获取HMAC的密钥并随意更改密文。但这取决于你的攻击模型。