我正在使用BouncyCastle在CBC模式下使用AES和PKCS5填充来加密/解密某些文件:
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
现在有两个问题:
>如何检查提供的解密数据密钥是否正确?
>如何检查加密输入是否未触及(例如,用户未使用HEX编辑器更改)?
谢谢
解决方法:
您可以使用类似CCM或GCM的AEAD mode,代替CBC.这些模式对加密消息进行身份验证,因此如果使用了错误的密钥,或者密码文本已被更改,您可以检测到它.但是你无法区分这些情况.
Java 7的GCM加密API支持,但Oracle Java实现附带的SunJCE提供程序尚不支持它.您可以通过BouncyCastle等第三方提供商获得支持.
如果您使用其他加密服务(如数字签名或消息验证代码),则可以实现相同的功能.