【问题标题】:Convert an element in tuple to a bytes-like object将元组中的元素转换为类似字节的对象
【发布时间】:2019-09-07 09:53:24
【问题描述】:

我正在尝试对一些 RSA 加密数据进行 base64 编码,但 RSA 加密返回一个元组,并且 base64 编码需要一个类似字节的对象。

文件“C:\PATH\AppData\Local\Continuum\anaconda3\lib\base64.py”,第 58 行,b64encode 编码 = binascii.b2a_base64(s, newline=False)

TypeError: 需要一个类似字节的对象,而不是“元组”

我正在寻找解决此问题的最佳方法的建议。

from Crypto.Cipher import AES
from Crypto.PublicKey import RSA

def rsa_encrypt(data):
    return pub_keyObj.encrypt(data, 32)

def rsa_encrypt_base64(data):
    return base64.standard_b64encode(rsa_encrypt(data))


encrypted_data = aes_encode(data, key, iv) #AES encoding is working fine
print("EncryptedString: ", rsa_encrypt_base64(encrypted_data))

【问题讨论】:

  • 那个元组的内容是什么?,你能发一个数据、键和iv的例子吗?
  • 元组的内容是 rsa 加密和类似 (b'.....e\x89, ' ,) 之类的“空”,其中 .... 以字节表示很多。
  • 数据可以是字符串或其他我想要加密的东西。生成密钥和 IV 以进行 AES 加密.. 这部分工作正常。

标签: python python-3.x encryption cryptography rsa


【解决方案1】:

return base64.standard_b64encode(rsa_encrypt(data))这一行,像这样添加0的索引:

return base64.standard_b64encode(rsa_encrypt(data)[0])

它会解决你的问题。

问题是rsa_encrypt 将返回一个包含两个项目的元组。第一项是与明文(字符串或长)相同类型的密文。第二项总是无。

请参阅Here 了解更多信息。

【讨论】:

  • 哇,这样的 API..."The second item is always None",现在我很好奇。你知道为什么总是None吗?
  • @Netwave,不,我不知道,我也很好奇。 :))
猜你喜欢
  • 2018-02-14
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2020-08-25
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
相关资源
最近更新 更多