2017-04-06 46 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