2014-01-22 119 views
0

我從Pycrypto文檔中獲取了以下代碼,供我的Python 2.7使用。代碼在這裏。使用Python中的字節字符串

from Crypto.Cipher import AES 
from Crypto import Random 
key = b'Sixteen byte key' 
iv = Random.new().read(AES.block_size) 
cipher = AES.new(key, AES.MODE_CFB, iv) 
msg = iv + cipher.encrypt(b'Attack at dawn') 
print msg 
msg2 = cipher.decrypt(msg) 
print str(msg2) 

我試圖讓味精的輸出崇高控制檯。我得到的是:

[Decode error - output not utf-8] 
[Decode error - output not utf-8] 
[Finished in 0.2s] 

我試圖做的是加密郵件文本,並查看崇高輸出的密文和解碼的消息,並查看原文。我試圖用msg.encode( 'UTF-8')但沒有給出錯誤,如:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x8a in position 5: ordinal not in range(128) 

我如何獲得的文本?任何幫助。

+0

加密的文本可能不是ASCII或Unicode字符串。你應該用不同的方式格式化它,例如'repr()'或十六進制,base64等。 –

回答

3

加密的結果是任意位和字節。你不能將它們看作文本,它們不代表任何編碼中的文本。

但是,您可以用文本表示這些字節。例如,使用hexadecimalbase64。您也可以使用repr,雖然這可能會引起誤解:即使加密字節不是ASCII文本,字節發生以匹配由ASCII分配給可打印字符的字節將顯示爲這些字符。

0

msgmsg2都是任意的字節串。試圖在UTF-8上編譯/解碼這些文件只會包含ASCII字節。

另外的docs for pycrypto sayAESCipher.decrypt()

對於MODE_CFB,密文長度(以字節爲單位)必須segment_size/8的倍數。

我不能評論這個(沒有加密專家),但在你的例子密文是30字節。