如何解码DER/PEM格式的IPFS私钥和公钥,它可以与pycryptome库一起使用(对于python3)?我以字符串的形式从IPFS配置文件中获取密钥,因此在这里我将不解释这个过程。在
我想做的是:
import base64, Crypto
publicKey = "CAASpgIwgE ... jkupAgMBAAE="
privateKey = "CAASqQkwgg ... Xmzva/Km7A=="
publicKey = base64.b64decode(publicKey)
key = Crypto.PublicKey.RSA.import_key(publicKey)
crypter = Crypto.Cipher.PKCS1_OAEPPKCS1_OAEP.new(key)
encryptedData = crypter.encrypt(data.encode())
result = base64.b64encode(encryptedData).decode()
我有以下例外:
^{pr2}$privateKey也有类似的问题。密钥的格式是什么?如何将其转换为可接受的格式?在
导入键函数源代码在那里:https://github.com/Legrandin/pycryptodome/blob/master/lib/Crypto/PublicKey/RSA.py#L682
解决办法并不像我乍看起来那么简单。在
首先,您需要了解PrivateKey和PublicKey变量的内容不仅仅是Base64中编码的纯密钥,它是一个在ByteArray中序列化然后在Base64中编码的protobuf对象。为了从中获取一个键,首先需要获得这个对象的模式,reference可以使用这个模式。在
我们保存这个文件并按照this page上的说明操作。简而言之,我运行命令
protoc python_out=. crypto.proto
来创建一个名为crypto_pb2.py
的Python模块。在所有准备工作都已完成,现在转到代码:
必须首先将base64字符串解码为字节数组:
^{pr2}$这个函数将一个字节数组反序列化为一个熟悉的Python protobuf对象,我从this answer获取它,并做了一些修改:
^{3}$我们进一步调用函数,传递解码后的base64及其对应的类的名称(}表示{}),我对
PublicKey
表示publicKey
,而{Data
属性感兴趣。在现在可以将其作为ByteArray传输到import_key函数。不要执行其他转换。在
相关问题 更多 >
编程相关推荐