c++ - 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
解决方案
您的问题是您在生成密钥后修改了指数。
params.GenerateRandomWithKeySize(prng, 2048);
params.SetPublicExponent(65537);
实际上密钥是在 e = 17 的第一行中生成的。尝试更改行顺序。
params.SetPublicExponent(65537);
params.GenerateRandomWithKeySize(prng, 2048);
推荐阅读
- ios - 在 iOS Swift 上隐藏状态栏
- c++ - OCI-22303:找不到类型“”。“VARCHAR2_5_TYPE”
- swift - Paytm 支付集成在 iOS 10 上不起作用
- php - 如何获取 WooCommerce 运输方式的成本和设置?
- pandas - 将 pandas 数据框与多索引对齐
- angular - Angular 9 - 带有外部库的自定义库不起作用
- youtube-iframe-api - 如何在多个播放器上使用来自 youtube iframe Api 的事件
- javascript - Javascript 未使用 Rich Text Publisher 在 HTML 中内联呈现
- python - 如何使用 Python 列表创建用户定义的函数?
- django-rest-framework - django-rest-framework:处理业务逻辑和返回什么?