如何检查解密是否成功?

时间:2009-12-31 11:07:58

标签: encryption openssl

当使用openssl库中的blowfish算法时,可以加密和解密任何数据。

此外,任何数据都可以使用任何密钥\ iv进行加密(解密)。 openssl无法判断解密是否成功。这只是一些数学变革。

那么,我该怎么做才能确保加密成功:某些数据是用加密的相同密钥/ iv解密的?

我应该在解密后应该检查的数据前面添加一些MAGIC字节吗?

4 个答案:

答案 0 :(得分:8)

您可以在文件末尾添加校验和(例如,原始内容的MD5)。解密后,最后16个字节必须再次等于md5(内容为16个字节)

答案 1 :(得分:1)

在许多可能的解决方案中,可以考虑使用CRC

答案 2 :(得分:0)

我认为数据末尾的校验和方法是最好的,但是它需要你解密整个内容直到最后。

从这个角度来看,开头的魔术字节将是一个优势,因为你可以决定解密是否在第一个块成功。但是,有人可能会争辩说,通过检查您的源代码,攻击者可能具有一定的优势(部分已知的明文方案)。

所以我所做的(最终在一个高效的软件中)是使用密钥本身作为第一个块(而不是使用常量或可预测的魔术字节)。这为攻击者带来了以下额外知识:

key = decrypt(ciphertext, key)

如果您使用例如,我没有找到证据表明这对攻击者来说是一个有用的提示。 AES。也许有人对此了解得更多。

答案 3 :(得分:0)

魔术字节,校验和和加密的加密密钥都使暴力攻击变得更加容易,因为攻击者只需要通过2256种可能性来运行消息,然后通过解密查找该魔法或校验和或内部密钥解密的数据。 如果他没有什么可以寻找的话,他就更难打破它,这意味着他可能会破坏它而从未意识到它。