【问题标题】:How to load Base64 RSA keys in Crypto++如何在 Crypto++ 中加载 Base64 RSA 密钥
【发布时间】:2017-06-22 00:31:56
【问题描述】:

我正在尝试为我正在制作的程序编写辅助函数,我需要将键作为字符串返回。找到了一种将 RSA 密钥从 PrivateKey/PublicKey 转换为 Base64 字符串的方法。

int main()
{
    //Generate params
    AutoSeededRandomPool rng;
    InvertibleRSAFunction params;
    params.Initialize(rng, 4096);

    //Generate Keys
    RSA::PrivateKey privKey(params);
    RSA::PublicKey pubKey(params);

    //Encode keys to Base64
    string encodedPriv, encodedPub;

    Base64Encoder privKeySink(new StringSink(encodedPriv));
    privKey.DEREncode(privKeySink);

    Base64Encoder pubKeySink(new StringSink(encodedPub));
    privKey.DEREncode(pubKeySink);

    RSA::PrivateKey pvKeyDecoded;
    RSA::PublicKey pbKeyDecoded;

    //how to decode...

    system("pause");
    return 0;
}

现在,我如何加载回编码的密钥?我找不到任何相关信息。

【问题讨论】:

    标签: c++ encryption rsa crypto++


    【解决方案1】:
    RSA::PrivateKey pvKeyDecoded;
    RSA::PublicKey pbKeyDecoded;
    
    //how to decode...
    

    你可以这样做:

    StringSource ss(encodedPriv, true, new Base64Decoder);
    pvKeyDecoded.BERDecode(ss);
    

    你也应该解决这个问题:

    Base64Encoder pubKeySink(new StringSink(encodedPub));
    privKey.DEREncode(pubKeySink);  // pubKey.DEREncode
    

    一旦密钥被写入,您应该致电MessageEnd()

    Base64Encoder privKeySink(new StringSink(encodedPriv));
    privKey.DEREncode(privKeySink);
    privKeySink.MessageEnd();
    
    Base64Encoder pubKeySink(new StringSink(encodedPub));
    pubKey.DEREncode(pubKeySink);
    pubKeySink.MessageEnd();
    

    您还可以从 Crypto++ wiki 中找到 Keys and Formats 的帮助。

    【讨论】:

    • 我之前确实尝试过,来自 Keys And Formats 链接,我得到的只是 BER 解码错误异常。事实上,我尝试了几乎所有来自 wiki 的东西,但无济于事。这就是我在这里寻求帮助的原因。我又试了一次,还是不行。
    • @Kyojin - 请参阅上面的编辑。下次,请问一个简洁的问题。您的问题询问如何加载 Base64 编码的密钥。您没有声明您遇到了未提供代码的异常。
    • 感谢它的工作!很抱歉没有提到例外。下次会尝试问得更好。
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多