在Crypto ++中,我正在尝试使用ECDH生成的公钥来使用ECIES加密消息。那可能吗?密钥存储在SecByteBlock中。我尝试了两种方法:1)直接通过StringSource读取字节; 2)创建一个Integer并将其编码为BER,然后尝试在公钥中对其进行解码。这些选项都不起作用,都会产生BER格式异常。
我可能做错了什么?有没有其他方法可以直接设置ECIES加密器公钥的字节?
谢谢!
答案 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);
无论如何,感谢评论中的帮助,它让我找到了正确的方向来找到答案!