2017-04-06 45 views
2

我正在使用AES 256加密我的应用程序中的整数。当我转换加密的文本为整数它给了我太久整数,如:AES不是256字节(8或16)

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进行加密吗?所以密文包含更少的位数?

+0

您期望什么安全保证?一个3位数字的号码可能会被猜测或被强迫。你所做的任何事情都不会安全,只会阻止偶然的攻击者。如果你明白这一点,你可能会碰到[哈希](http://hashids.org/)。无论如何,你真的需要他们可以恢复吗?也许裁剪哈希也可能工作。 –

回答

5

“AES256”中的“256”是指密钥大小,您所遇到的“问题”是大小的块的大小。

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

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

+0

谢谢。但是您能否提供一个使用AES的CTR模式示例? – Kaushal28

+0

http://stackoverflow.com/questions/3154998/pycrypto-problem-using-aesctr我引用这个链接,但它给错误 – Kaushal28

+0

如果你有一个不同的代码段的问题,我会建议你张贴另一个问题,确保提供你正在使用的代码和你遇到的错误的细节。 – Iridium