python crypto加密/解密 - 无法处理unicode替换字符

时间:2017-01-08 14:41:46

标签: python cryptography

我在Python中遇到AES加密/解密问题 - 解密后我收到unicode替换字符,我不知道怎么做才能正确。从其他答案我发现我的错误是什么(我正在使用加密文本,这是字节,而不是字符串)我想使用base64,但我收到一个错误。这是我的尝试:

with open ('pub.key', 'rt') as pub_key:
     public_key = RSA.importKey(pub_key.read())
     base64.b64encode(public_key.encrypt(file_content, key_size))

错误:

TypeError: b2a_base64() argument 1 must be string or buffer, not tuple

这可能很容易修复,但我找不到办法。

修改

我一直在尝试按照@ Jean-FrançoisFabre的建议去做,但后来我仍然遇到解码问题,我的意思是我得到了unicode替换字符作为回报。 这是我解码的方式:

with open ('priv.key', 'rt') as priv_key:
     private_key = RSA.importKey(priv_key.read())
     return private_key.decrypt(base64.b64decode(content))

结果是:

g��q@~w%8����[��P��"�����?�)���&�q���1�g�}�w��d[�`�0j^y���4p
输入file_content的假结构目录(key_size 16

file_content = "----------------------------------------------------------------------------------------------------
/home/pawel/custom_folder/documentA.md
----------------------------------------------------------------------------------------------------
/home/pawel/custom_folder/catalogA/documentA.md
----------------------------------------------------------------------------------------------------
/home/pawel/custom_folder/catalogA/documentB.md
----------------------------------------------------------------------------------------------------
/home/pawel/custom_folder/catalogB/documentA.md
Zawartosc katalogu A!
----------------------------------------------------------------------------------------------------
/home/pawel/custom_folder/catalogB/other.json
{
 "bank": "ING Online",
 "user": "franek0057",
 "pswd": "fauDA41"
}
----------------------------------------------------"

1 个答案:

答案 0 :(得分:0)

来自documentation

  

加密(自我,明文,K)

     

使用RSA加密一段数据。

     

参数:

...

  

返回:       包含两个项目的元组。第一项是与明文相同类型的密文(字符串或长整数)。 第二项始终为无。   覆盖:pubkey.pubkey.encrypt

所以你只需要删除元组的第二项来获取加密消息:

base64.b64encode(public_key.encrypt(file_content, key_size)[0])