如何使用具有特定密钥和 IV 长度的 AES / CBC 128 加密字符串

How to encrypt sting with AES / CBC 128 with specific key and IV length

我正在尝试使用 AES cbc 128 加密字符串,但我每次都遇到这个问题

self._cipher = factory.new(key, args, kwargs)ValueError: IV 必须是 16 字节长

我正在使用 pycrypto 库,这是我的代码,

import base64
from Crypto.Cipher import AES

def pad(m):
     return m+chr(16-len(m)%16)*(16-len(m)%16)

msg = 'Hello there I am new in Python'
ciph = AES.new("asdfghjkl", AES.MODE_CBC, "asdfghjkl")
enc = ciph.encrypt(pad(msg))
base = base64.b64encode(enc)
print (base)

每当我将我的密钥和 IV 长度更改为 16 位时,它都有效......但我只想使用此密钥和 IV 加密字符串,即“asdfghjkl”。 =11=]

我看到很多在线网站使用任何密钥、IV 长度以相同方式加密字符串..但我没弄清楚...它是如何工作的>

提前致谢。

好吧 Mike 在评论中,AES 使用 16 字节的 IV 和 16、24 或 32 字节的密钥大小,因此不可能使用短的 IV 和密钥加密字符串或任何它,除非你做了一些技巧,例如用 Zeros 的值扩展长度,直到它变成 16 字节..

你可以非常简单地将你的密码和 IV 转换为十六进制并添加零直到它变成 16 在你的情况下“asdfghjkl”将是十六进制“ 61 73 64 66 67 68 6a 6b 6c " 所以你需要添加 00000000000000 这样它就可以正常工作..但它不安全.. python 您可以使用 unhexlify() 将十六进制密钥和 iv 转换为字节。