2013-01-11 80 views
3

我使用AES进行加密和CRC来检查数据的完整性,我的感觉是CRC校验在我的情况下是多余的。我做了以下内容:使用加密时CRC校验冗余?

加密:

  1. 从中
  2. 加密有效载荷数据采取有效载荷数据,计算CRC以及CRC

解密:

  1. 解密数据
  2. 计算新的薪酬CRC负载数据,并与旧的CRC

我想在我的单元测试挑起CRC校验失败,但是当我操纵有效载荷数据解密总是抛出一个BadPaddingException进行比较。

我的问题是:如果数据被破坏或操纵时(如果解密总是抛出这个异常?)是不是CRC检查冗余我的使用方式?

+0

你在加密的步骤2加密怎么办?有效载荷+ CRC还是只是有效载荷? – Timmos

+0

向我们展示您正在使用的加密/解密方法的代码。 – Andremoniy

+0

@Timmos我加密有效载荷+ CRC(见上) – mithrandir

回答

2

假设解密不正确的数据是均匀分布的,对于每255个不正确的密码,它将显示为正确的PKCS5/PKCS7填充约1次。这意味着仍然有1/255的机会发生正确的改变,并且该项目将解密成垃圾。所以你的支票不是浪费。

如果你确实需要你期望的行为,你可以使用“AES/CTR/NoPadding”,它不需要一个确切的块大小,并且总是会返回一个解密的字节[],而不管这些关键字是否匹配。

但是,如果攻击者可以反复更改密文并解密它(例如可能是加密的数据存储在cookie中),并且它们能够区分您的行为,当解密的数据抛出一个坏填充异常当它只是垃圾时,他们可以通过“填充甲骨文攻击”来确定明文。

您可能还想考虑一下,如果比CRC CRC更健壮的指纹可能比较合适,例如SHA-256以确保消息完整性。

很多,这是由重复:AES BadPaddingException

+1

谢谢 - 这就是我想知道的! – mithrandir