代码之家  ›  专栏  ›  技术社区  ›  AutoTester213

带前缀的IV值AES加密产生错误

  •  0
  • AutoTester213  · 技术社区  · 7 年前

    我得到了 Error 131073 while instatiating the CFB mode 当我尝试使用前缀IV值时。当我将其更改为“随机”时,它会工作,但我需要在其前面加前缀。

    我尝试过的结果给出了以下错误:

    import base64
    from Crypto.Cipher import AES
    import hashlib
    from Crypto import Random
    import binascii
    
    def pad(s):
        return s + b"\0" * (AES.block_size - len(s) % AES.block_size)
    
    def encrypt(message, key, key_size=256):
        message = pad(message)
        iv = Random.new().read(AES.block_size)
        cipher = AES.new(key, AES.MODE_CFB, iv)
        return base64.b64encode(cipher.encrypt(message))
    
    key = hashlib.sha256(b'P9KcPLf+q21f9DUnI0cyP1xgALRa8+uKfZXiNIcjphM=').digest()
    key1 = base64.b64encode(key)
    iv_value = b'lEvSlTN0Q7gu9sAUvPTySQ=='
    iv = base64.b64encode(iv_value) #How can prefix this?
    
    cipher = AES.new(key, AES.MODE_CFB, iv)
    
    message = Mac_AddressBytes + ip_address_Bytes + DeviceIdBytes
    msg = iv + cipher.encrypt(message)
    
    s = encrypt(message, key)
    
    DeviceIdentity = "0x" + s.decode('utf-8')
    print(str(DeviceIdentity))
    

    但是当我将IV设置为随机时,我得到了期望的输出。

    iv = Random.new().read(AES.block_size)
    

    如何为IV使用前缀值?

    注:该 Mac_AddressBytes , ip_address_Bytes DeviceIdBytes 是MAC地址、Ip地址、DeviceID的有效值。这些值是随机生成的字符串

    1 回复  |  直到 7 年前
        1
  •  2
  •   kelalaka    7 年前

    你得到的错误是

    ValueError: Incorrect IV length (it must be 16 bytes long)
    

    你必须解码你的静脉注射

    iv = base64.b64decode(iv_value)
    
    推荐文章