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