Python解码编码为PEM文件的ECDH(曲线25519)公钥

2024-04-25 23:31:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我们使用的服务使用ECDH(曲线25519)向我们发送加密数据。我们在Java中有encryption/decryption的参考实现。 发送方使用BouncyCastle的BCECPublicKey作为公钥,然后encodes将其作为PEM文件(使用DER),并以X.509的SubjectPublicKeyInfo格式存储,大致如下所示:

// key is of type BCECPublicKey
byte [] encodedBytes = key.getEncoded()
return new String(Base64.getEncoder().encode(encodedBytes)) // Omitting code to make PEM file.

在他们的参考代码中,在解密过程中,他们使用以下Java代码从上述编码密钥中提取公钥:

final byte[] pkcs8EncodedKey = Base64.getDecoder().decode(encodedKey);
KeySpec keySpec = new X509EncodedKeySpec(pkcs8EncodedKey);

关于如何在Python世界中解码这个公钥,有什么想法吗?我找到了加载X.509证书的示例代码,但不仅仅是公钥。我们正在使用Cryptography库,并希望创建X255519PublicKey的一个实例。 X25519PublicKey.from_public_bytes()只接受原始字节

使用OpenSSL命令行工具,我可以检查公钥的PEM编码版本,如下所示:

openssl asn1parse -in pub_key.pem

公开密码匙详情:

-----BEGIN PUBLIC KEY-----
MIIBMTCB6gYHKoZIzj0CATCB3gIBATArBgcqhkjOPQEBAiB/////////////////
////////////////////////7TBEBCAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqYSRShRAQge0Je0Je0Je0Je0Je0Je0Je0Je0Je0Je0JgtenHcQyGQEQQQqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq0kWiCuGaG4oIa04B7dLHdI0UySPU1+
bXxhsinpxaJ+ztPZAiAQAAAAAAAAAAAAAAAAAAAAFN753qL3nNZYEmMaXPXT7QIB
CANCAAQSDHX2i/KJdNV+BMsYh4cXz6lQ8dAE8FaLr/iONym21jaaphI59vvm/hzk
IqeeTn4uRYmuWD/ry4GgwGL67FpR
-----END PUBLIC KEY-----


Tags: key代码编码newjavabytepublicpem