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