Encryption 更改AES CBC加密的文件中的1字节是否会导致该文件无法再解密?

Encryption 更改AES CBC加密的文件中的1字节是否会导致该文件无法再解密?,encryption,cryptography,aes,Encryption,Cryptography,Aes,如果我有一个用AES CBC加密的加密文件,更改文件中的某个随机字节会导致它无法再被解密吗 我的理解是正确的吗?直到字节被更改的地方,所有的东西都可以解密,但从那时起,它就不会解密了 这不太正确。AES以块(特别是128位块)的形式加密/解密数据。此外,在CBC模式下,第(i+1)个块的加密/解密取决于 (i) 第四街区 因此,如果随机字节落在第i个块内(为了简单起见,我们假设该字节不会在两个块之间交叉),当您解密第i个块时,它将给您错误的解密(即128位的块将不正确)。此外,由于下一个块是使用

如果我有一个用AES CBC加密的加密文件,更改文件中的某个随机字节会导致它无法再被解密吗


我的理解是正确的吗?直到字节被更改的地方,所有的东西都可以解密,但从那时起,它就不会解密了

这不太正确。AES以块(特别是128位块)的形式加密/解密数据。此外,在CBC模式下,第(i+1)个块的加密/解密取决于 (i) 第四街区

因此,如果随机字节落在第i个块内(为了简单起见,我们假设该字节不会在两个块之间交叉),当您解密第i个块时,它将给您错误的解密(即128位的块将不正确)。此外,由于下一个块是使用第i个块加密的,因此第(i+1)个块也将不正确地解密(另128位又称16字节)。从这里开始,后续的块将是正确的(与之前的所有块一样)

更多信息,我在维基百科上读到

还有一件事:更改随机字节可能不会阻止解密的发生——它不会产生原始明文(当然)


希望有帮助

好的,它通常仍然会解密,但会给您一个不同的纯文本。如果使用了填充,并且最后一个块正在解密为不同的纯文本,那么实现可能会报告错误。例如,在Java中,如果无法取消填充纯文本,则会出现BadPaddingException。@owlstead:Yes;这就是为什么我通常说的。@SLaks你当然是对的,虽然我只是想进一步扩展它,但删除了你评论中的ref。即使最后一个块被更改了,它仍然会解密为可卸载块的概率也高于256分之一。如果填充中有不正确的字节,那么整个解密过程可能会抛出一个错误“填料不好“错误,正如@owlstead所说的那样。@Frankli先生,我有点困惑,为什么加密前对明文的1字节更改会更改后续的每个块,但解密前对加密文本的1字节更改不会更改解密后的每个后续块。我读了维基页面,但仍然不确定。你认为你能进一步解释一下为什么会这样吗?在计算密文的过程中,最后一个密码块与纯文本进行异或运算。如果更改任何纯文本,则该纯文本的加密块将被更改,将向量与下一块中的纯文本异或,一直更改到最后。如果更改密码文本,则该块的纯文本将更改。与下一个块的纯文本的向量异或也不同,导致该块中的单个字节丢失。Hoever,由于后续块的密文没有更改,下一个块的向量就可以了。Kyle,只需使用单块ECB编码实现CBC并通过调试器运行它,就可以真正可视化整个过程,实现CBC一点也不难。@owlstead谢谢:)。我想我现在明白了。