老实说,字符 “ \ 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的填充方案,即:
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)发送数据是不安全的。