首页 > 解决方案 > CryptoPP 生成无效密钥 RSA

问题描述

我正在尝试用 C++ 中的 RSA 加密一些文本,

加密时我正在生成n, e, d但尝试解密时,私钥初始化程序说密钥无效......

所以我构建了一个生成密钥的代码,然后尝试初始化一个私钥对象,它说密钥仍然无效:

int main()
{
    
    CryptoPP::InvertibleRSAFunction params;
    CryptoPP::AutoSeededRandomPool prng;
    params.GenerateRandomWithKeySize(prng, 2048);
    params.SetPublicExponent(65537);

    const CryptoPP::Integer& n = params.GetModulus();
    const CryptoPP::Integer& p = params.GetPrime1();
    const CryptoPP::Integer& q = params.GetPrime2();
    const CryptoPP::Integer& d = params.GetPrivateExponent();
    const CryptoPP::Integer& e = params.GetPublicExponent();

    CryptoPP::RSA::PrivateKey privk;
    privk.Initialize(n, e, d);
}

程序崩溃到:InvertibleRSAFunction: input is not a valid RSA private key

标签: c++cryptographyrsacrypto++

解决方案


您的问题是您在生成密钥后修改了指数。

params.GenerateRandomWithKeySize(prng, 2048);
params.SetPublicExponent(65537);

实际上密钥是在 e = 17 的第一行中生成的。尝试更改行顺序。

params.SetPublicExponent(65537);
params.GenerateRandomWithKeySize(prng, 2048);

推荐阅读