相关疑难解决方法(0)

AES 256 加密 -> 更改初始化向量会在不知道密钥的情况下稍微更改解密的消息

我通过 AES 加密/解密示例进行了以下观察,这对我来说非常违反直觉。

我尝试在 CBC 模式下使用 AES 加密和解密一个简单的有效负载。我的理解是,根据这个答案,初始化向量不必是秘密的: https: //security.stackexchange.com/a/17046。在我看到的大多数示例中,初始化向量是加密有效负载的非随机部分。

但通过更改初始化向量,我能够在加密期间更改消息。

例如,请参阅我从/sf/answers/1535015331/复制并改编的这个 python 示例。我设置了硬编码的ivforencrypt并稍微调整了ivfor decrypt。通过此更改,我可以将消息从"hello world"更改为"hello!world"

import base64
import hashlib

from Crypto.Cipher import AES


class AESCipher(object):

    def __init__(self, key):
        self.bs = AES.block_size
        self.key = hashlib.sha256(key.encode()).digest()

    def encrypt(self, raw):
        raw = self._pad(raw)
        #iv = Random.new().read(AES.block_size)
        #                    | here is the difference to the iv from decrypt
        iv = b'\xe2\xe0l3H\xc42*N\xb0\x152\x98\x9cBh'
        cipher = AES.new(self.key, AES.MODE_CBC, iv)
        code = cipher.encrypt((raw.encode())) …
Run Code Online (Sandbox Code Playgroud)

python encryption aes pycrypto initialization-vector

5
推荐指数
1
解决办法
1516
查看次数