AES不是256字节(8或16)

时间:2017-04-06 07:20:56

标签: python python-3.x encryption cryptography aes

我使用AES 256加密应用程序中的整数。当我将加密文本转换为整数时,它给了我太长的整数,如:

127510614367469717778923839884853125321

即使输入纯文本是单个数字整数。

我使用以下代码:

from Crypto.Cipher import AES
import binascii
obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = "0000000000000001" 
ct = obj.encrypt(message)
hexa = binascii.hexlify(ct)
i = int(hexa,16)
print(i)

输出密文太长。我希望输出密文为3位或4位数而不是这个长数。

这有什么替代方案吗?我可以使用AES 8或AES 16进行加密吗?因此,密文包含较少的数字?

1 个答案:

答案 0 :(得分:5)

“AES256”中的“256”表示密钥大小,“问题”表示大小。

AES是block cipher,具有128位(16字节)块大小。这意味着它期望作为输入,并产生16字节数据块作为输出。这是算法的特征,无论密钥大小变量如何(AES 128/192/256)都是相同的。这是分组密码的固有特性,虽然存在块大小比AES小的密码,但这实际上使它们的安全性降低(例如参见Sweet32)。

然而,您可以在一种模式下使用AES,使其成为输入大小=输出大小的stream cipher,例如: CTR (Counter) mode