考虑客户端和服务器之间的 Diffie-Hellman 密钥交换,其中客户端应用程序是用 c++ 编写的,后端是用 python 编写的。客户端应用程序将Crypto++ lib 用于加密内容,而 Python 使用cryptography。
这里是生成私钥和公钥的客户端应用程序部分
//domain parameters
OID CURVE = secp256k1();
AutoSeededX917RNG<AES> rng;
ECDH < ECP >::Domain dhA(CURVE);
// application private and publik key
SecByteBlock privA(dhA.PrivateKeyLength()), pubA(dhA.PublicKeyLength());
std::string privB64(R"(P3VfVpnSYcKQWX+6EZOly2XKy6no4UAB0cQhjBfyBD4=)");
privA.Assign(reinterpret_cast<const byte*>(FromB64(privB64).c_str()), dhA.PrivateKeyLength());
dhA.GeneratePublicKey(rng, privA, pubA);
// serializa public key into integer
Integer intPub;
intPub.Decode(pubA.BytePtr(), pubA.SizeInBytes());
std::string ret;
intPub.DEREncode(CryptoPP::StringSink(ret));
std::cout << ToB64(ret);// the output is loaded into python
现在的问题是我不知道如何将公钥反序列化为 python EllipticCurvePublicKey。当我使用cryptography.hazmat.primitives.serialization.load_der_public_key() 我得到
ValueError: Could not deserialize key data
有没有人尝试使用这两个库在 Crypto++ 和 Python 之间实现 Diffie-Hellman 密钥交换?