今天尝试用AES-256-OFB加密一个flag结果输出的密文是43字节,不是128位(16字节)的倍数,代码如下:
import os
from Crypto.Cipher import AES
data=b'flag{a7ba7128-3917-4551-8260-b3499e9dd7b12}'
aes = AES.new(os.urandom(32), AES.MODE_OFB, os.urandom(16))
aes.encrypt(data)
结果输出是一串ee9b074ed941942a965e966de91590af1e32b2c1cccde61efb5295374c807e49ab275456b9b937a6576680
并不是16字节的倍数,百思不得其解,后来网上查了下OFB的工作模式:
可以看到,他加密解密的时候用的是异或加密块输出的办法,这样就能够将块密文(Block Cipher)转换为流密文。输入的明文大小就不用固定了,不然还得使用PKCS7padding算法填充。因此密文的大小也不用固定。