首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >crypto++ ECIES BERDecodePrivateKey的问题

crypto++ ECIES BERDecodePrivateKey的问题
EN

Stack Overflow用户
提问于 2020-01-14 18:58:44
回答 1查看 209关注 0票数 1

我正在尝试将带有DEREncodePrivateKey的ECIES num0 PrivateKey存储到std::string中,并将其重新加载到num1 PrivateKey对象中以进行测试。问题是,当密钥与第二个PrivateKey对象中的BERDecodePrivateKey一起加载时,它不能被验证(也测试了未验证的加密和解密,也没有解密)

下面是代码

代码语言:javascript
复制
    using namespace CryptoPP;
        CryptoPP::AutoSeededRandomPool prng;

        ECIES<ECP>::PrivateKey pp; 
        pp.Initialize(prng, ASN1::secp256k1());
/* returns true*/
        bool val=pp.Validate(prng, 3);

        std::string saves;
        StringSink savesink(saves);
        pp.DEREncodePrivateKey(savesink);
/*additional unnecessary steps to make sure the key is written completely */
        savesink.MessageEnd();
        savesink.Flush(true);   

        ECIES<ECP>::PrivateKey pro;
        StringSource savesSource(saves, true);
        pro.BERDecodePrivateKey(savesSource,true,savesSource.MaxRetrievable());
/*here the exception is thrown */
        pro.ThrowIfInvalid(prng, 3);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-19 02:19:50

最终发现了问题所在,正如@maarten-bodewes在注释中提到的DER编码的私有指数不确定privateKey对象的曲线OID,因此在BER解码和导入密钥之前,我们需要以某种方式确定对象的OID;最简单的方法是在初始化上面的代码更改为:

代码语言:javascript
复制
ECIES<ECP>::PrivateKey pro;
    StringSource savesSource(saves, true);
    auto rett = savesSource.MaxRetrievable();
    pro.Initialize(prng, ASN1::secp256k1());
    pro.BERDecodePrivateKey(savesSource,true,savesSource.MaxRetrievable());

还可以对现有对象执行AccessGroupParameters().Initialize(/*OID*/);Initialize(/*OID*/)操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59732415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档