2015-05-14 104 views
-1

我使用加密框架...Python的unicode字符串和字節

from Crypto.PublicKey import RSA  
new_key=RSA.generate(1024,e=65537)  
plain_text_original="xyz"  
cipher_text=new_key.encrypt(plain_text_original.encode("utf-8"),123455)[0]  
print(cipher_text)  
print(cipher_text.decode("utf-8"))  

的cipher_text是如下:

b"\x8cwO\xf5\xc9\xd3\xa4c|8\xcb\xfc\xef\xbd\xca\xb1&\x15aj\xec\xff\xd9\xeL" 
try decode("utf-8") 

它顯示了異常的UnicodeDecodeError

這是爲什麼?

+0

你使用的是什麼版本的Python? 2.x和3.x處理字符串顯着不同。嗯,我猜你正在使用3.x因爲bute類型,對不起。 –

+1

爲什麼你認爲密文是有效的UTF8或有效的文本呢?它不是。 – deviantfan

回答

0

密文儘管名稱不包含可打印的文本。所有現代密碼 - 像其他密碼學基元一樣 - 對比特進行輸入輸出操作。

這意味着,使用文字輸入您需要執行如UTF-8,ASCII,ISO-拉丁等。輸出也是位,所以如果你需要的文字你許多需要的二進制文本。常見的編碼器是十六進制(更易於人類使用)和base64(更高效)的編碼。

一個好的加密方法提供了與隨機無法區分的輸出。由於並非所有字節都可以解碼爲可讀文本,因此不可能直接在密碼輸出上執行字符解碼。

當然,你可能會得到「幸運」和而不是得到解碼錯誤或異常。在最壞的情況下,您可能會丟失數據,因爲許多解碼器會默默跳過或替換無法解碼的字節。