2015-05-14 105 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(更高效)的编码。

一个好的加密方法提供了与随机无法区分的输出。由于并非所有字节都可以解码为可读文本,因此不可能直接在密码输出上执行字符解码。

当然,你可能会得到“幸运”和而不是得到解码错误或异常。在最坏的情况下,您可能会丢失数据,因为许多解码器会默默跳过或替换无法解码的字节。