我有一些加密数据,使用 rc2-64-cbc NO PADDING 加密。我能够很好地解密。
问题:即使加密的内容是用错误的密钥加密的,我的解密也不会出错,而是解密为一些垃圾值,因为它的 rc2 并且我相信没有填充。
我尝试使用 openssl Linux 命令提示符和我的 C/C++ 程序(使用 EVP_* API 调用)。
是否有任何 openssl 选项/方法来检测使用的错误密钥?(命令行或 EVP_* C/C++ API 调用)
我有一些加密数据,使用 rc2-64-cbc NO PADDING 加密。我能够很好地解密。
问题:即使加密的内容是用错误的密钥加密的,我的解密也不会出错,而是解密为一些垃圾值,因为它的 rc2 并且我相信没有填充。
我尝试使用 openssl Linux 命令提示符和我的 C/C++ 程序(使用 EVP_* API 调用)。
是否有任何 openssl 选项/方法来检测使用的错误密钥?(命令行或 EVP_* C/C++ API 调用)
除非将某种形式的身份验证添加到加密数据中,否则无法确定。最好的办法是寻找“有意义”的解密,解密后的数据要么是正确的,要么表现为无法与随机字节区分开来的字节序列。
假设没有向消息中添加身份验证,可能的方法包括:
在消息中的已知位置有一些已知正确的字节,这被称为婴儿床,一个例子是二战德国的天气报告以可预测的文本开头。
对随机性进行测试。
如果数据是文本,则检查无效字符,例如 0x00 - 0x1f。
想想适用于您的数据的其他测试。
您可以获取纯文本,计算校验和,然后对两者进行加密。一旦你解密了密文(即使使用了错误的密钥),尝试再次计算解密文本的校验和,我相信它会失败。