老实说,字符 “ n n n n n n n n n n n” 在我看来并不那么随意。;-)
您正在CBC模式下使用AES。这就要求明文和密文的长度始终为16字节的倍数。使用显示的代码,您实际上应该看到
data传递给的异常
encrypt()不满足该条件时引发了异常。看起来您已经在输入的内容中添加了足够的换行符(
’ n’ ,直到明文碰巧对齐为止。
除此之外,还有两种解决对齐问题的常用方法:
从CBC(
AES.MODE_CBC
)切换到CFB(AES.MODE_CFB
)。segment_size
使用PyCrypto使用的默认值,您将对明文和密文长度没有任何限制。保留CBC并使用类似PKCS#7的填充方案,即:
- 在对
X
字节的明文进行加密之前,请向后追加达到下一个16字节边界所需的尽可能多的字节。所有填充字节都具有相同的值:您要添加的字节数:length = 16 - (len(data) % 16)
data += bytes([length])*length
- 在对
这就是Python 3风格。在Python 2中,您将具有:
length = 16 - (len(data) % 16) data += chr(length)*length* 解密后,从纯文本的后面删除与填充指示的一样多的字节: data = data[:-data[-1]]
即使我了解您的情况,这只是一个课堂练习,但我想指出的是,没有任何形式的身份验证(例如,MAC)发送数据是不安全的。



