在ECIES中使用ECDH密钥

时间:2015-09-28 22:13:56

标签: crypto++

在Crypto ++中,我正在尝试使用ECDH生成的公钥来使用ECIES加密消息。那可能吗?密钥存储在SecByteBlock中。我尝试了两种方法:1)直接通过StringSource读取字节; 2)创建一个Integer并将其编码为BER,然后尝试在公钥中对其进行解码。这些选项都不起作用,都会产生BER格式异常。

我可能做错了什么?有没有其他方法可以直接设置ECIES加密器公钥的字节?

谢谢!

1 个答案:

答案 0 :(得分:2)

对于任何想知道的人,我实际上要做的是这个...假设在某个时刻,密钥对是通过以下方式生成的:

ECDH<ECP>::Domain domain(some_curve);
SecByteBlock prv(domain.PrivateKeyLength()), pub(domain.PublicKeyLength());
domain.GenerateKeyPair(AutoSeededRandomPool(), prv, pub);

后来,只给出了原始(字节)表示,如果你需要加载这些密钥进行加密,你可以这样做:

auto& params = domain.GetGroupParameters();
ECIES<ECP>::PrivateKey prv_key;
ECIES<ECP>::PublicKey pub_key;
prv_key.Initialize(params, Integer(prv.begin(), prv.size());
pub_key.Initialize(params, params.DecodeElement(pub, true));

然后根据需要创建Encryptor / Decryptor:

ECIES<ECP>::Encryptor encptor(pub_key);
ECIES<ECP>::Decryptor decptor(prv_key);

无论如何,感谢评论中的帮助,它让我找到了正确的方向来找到答案!