簡體   English   中英

在Python中使用字節字符串

[英]Working with Byte string in Python

我有以下代碼摘自Pycrypto文檔中的python 2.7。 代碼在這里。

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)

我試圖在Sublime控制台中獲取味精的輸出。 我所擁有的是:

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

我想做的是對消息文本進行加密,並在Sublime輸出中查看其加密文本,並對消息進行解碼並查看原始文本。 我嘗試使用msg.encode('utf-8'),但無法給出如下錯誤:

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

我如何獲得短信? 任何幫助。

加密的結果是任意的位和字節。 您無法將它們視為文本,它們不以任何編碼形式表示文本。

但是,您可以用文本表示這些字節。 例如,使用十六進制base64 您也可以使用repr ,盡管這可能會誤導您: 恰好與ASCII分配給可打印字符的字節匹配的字節將顯示為這些字符,即使加密的字節絕不是ASCII文本也是如此。

msgmsg2都是任意字節字符串。 僅當它們僅包含ASCII字節時,嘗試從UTF-8進行編碼或從UTF-8解碼它們才會成功。

另外pycrypto文檔說 AESCipher.decrypt()

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

我無法對此發表評論(沒有加密專家),但是在您的示例中,密文為30個字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM