1

我有一些加密数据,使用 rc2-64-cbc NO PADDING 加密。我能够很好地解密。

问题:即使加密的内容是用错误的密钥加密的,我的解密也不会出错,而是解密为一些垃圾值,因为它的 rc2 并且我相信没有填充。

我尝试使用 openssl Linux 命令提示符和我的 C/C++ 程序(使用 EVP_* API 调用)。

是否有任何 openssl 选项/方法来检测使用的错误密钥?(命令行或 EVP_* C/C++ API 调用)

4

2 回答 2

4

除非将某种形式的身份验证添加到加密数据中,否则无法确定。最好的办法是寻找“有意义”的解密,解密后的数据要么是正确的,要么表现为无法与随机字节区分开来的字节序列。

假设没有向消息中添加身份验证,可能的方法包括:

  1. 在消息中的已知位置有一些已知正确的字节,这被称为婴儿床,一个例子是二战德国的天气报告以可预测的文本开头。

  2. 对随机性进行测试。

  3. 如果数据是文本,则检查无效字符,例如 0x00 - 0x1f。

  4. 想想适用于您的数据的其他测试。

于 2017-04-13T03:23:19.393 回答
1

您可以获取纯文本,计算校验和,然后对两者进行加密。一旦你解密了密文(即使使用了错误的密钥),尝试再次计算解密文本的校验和,我相信它会失败。

于 2018-08-03T07:42:01.883 回答