我正在使用 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 进行加密吗?那么密文中的位数会更少吗?
最佳答案
“AES256”中的“256”指的是 key 大小,您遇到的“问题”在于 block 大小。
AES 是 block cipher block 大小为 128 位(16 字节)。这意味着它期望作为输入,并生成 16 字节数据 block 作为输出。这是算法的特征,并且无论 key 大小变体如何(AES 128/192/256)都是相同的。这是分组密码的固有特征,虽然存在比 AES 更小的分组大小的密码,但这实际上使它们的安全性降低(例如,参见 Sweet32 )。
但是,您可以在某种模式下使用 AES,导致其变为 stream cipher输入大小 = 输出大小,例如CTR (Counter) mode .
关于python - AES 256 字节以外(8 或 16),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43248323/