2012-07-16 105 views
0

作爲一項自學習練習,我試圖學習如何使用一些pycrypto庫。我需要使用AES解密CBC_MODE中的密文字符串。我給出了密文,密鑰和IV。這裏是我寫的代碼:使用pycrypto進行AES解密

from Crypto.Cipher import AES 

mode = AES.MODE_CBC 
key = "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1" 
ciphertext = "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"; 

iv = ciphertext[:32] 
ciphertext = ciphertext[32:] 
decryptor = AES.new(key, mode, iv) 
plaintext = decryptor.decrypt(ciphertext) 
print plaintext 

當我運行它,我得到以下錯誤:

ValueError: IV must be 16 bytes long

我知道IV字符串是32個進制的字符,因此,16個字節。我認爲這可能是一個打字問題,但我不知道如何糾正它。誰能幫忙?

謝謝!

回答

1

您的字符串只包含十六進制字符,但它們仍然是純字符串,因此每個字符都是有效的。

所以你的IV字符串是32字節長,因爲你從ciphertext中切出它。

0

我懷疑你是對的,這是打字。嘗試其中之一:

IV = binascii.unhexlify(密文[32])

IV =長(密文[32],16)

0

給計算機時正在處理十六進制。它將它視爲一個字符串。 iv = iv.decode('hex');

+0

這將有助於解釋**如何**告訴他正在使用十六進制計算機。 – kdopen 2015-02-13 23:33:23