我们使用的服务使用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-----
目前没有回答
相关问题 更多 >
编程相关推荐