Encryption 使用Rsa私钥/函数解密数据

Encryption 使用Rsa私钥/函数解密数据,encryption,cryptography,byte,rsa,crypto++,Encryption,Cryptography,Byte,Rsa,Crypto++,我只是想用RSA对数据进行编码/解码(首先是解码)。 我不关心数据的类型(字符串、字节或其他lolcat编码的数据),我只是寻找一个非常简单的函数来完成这项工作(加密操作),其余的我都可以完成 以下是我尝试过的: CryptoPP::InvertibleRSAFunction rsa; rsa.setmodule(n_因子); rsa.SetPrivateExponent(d_private_指数); rsa.SetPrime1(rsa_参数在(p1)); rsa.SetPrime2(rsa_参

我只是想用RSA对数据进行编码/解码(首先是解码)。 我不关心数据的类型(字符串、字节或其他lolcat编码的数据),我只是寻找一个非常简单的函数来完成这项工作(加密操作),其余的我都可以完成

以下是我尝试过的:

CryptoPP::InvertibleRSAFunction rsa;
rsa.setmodule(n_因子);
rsa.SetPrivateExponent(d_private_指数);
rsa.SetPrime1(rsa_参数在(p1));
rsa.SetPrime2(rsa_参数at(p2));
//以上所有输入均正确。我没有public exponent,但它在其他语言中工作(我比较了所有输入/输出)
bool key_ok=rsa.Validate(CryptoPP::NullRNG(),15);
/*返回false,但不告诉我原因:/*/
CryptoPP::整数到_解码(我的_数据、我的_数据的大小);
res=rsa.CalculateInverse(rg,to_decode);
这将返回:

EXCEPTION : what():  CryptoMaterial: this object contains invalid values
返回的错误代码对应于
“无效的\u数据\u格式”
,这可能不是关键问题,而是输入问题


如果有人对这个库有一定的经验,或者检测到一个“noob”错误(我从4个小时起就开始思考代码,所以这是可能的),任何帮助都将不胜感激。

比我想象的简单:

CryptoPP::Integer dec_data = a_exp_b_mod_c( enc_data, d_private_exponent, n_modulus );

所以“d”和“n”是不够的。我真的不明白为什么它不能使用加密功能。

比我想象的容易:

CryptoPP::Integer dec_data = a_exp_b_mod_c( enc_data, d_private_exponent, n_modulus );

所以“d”和“n”是不够的。我真的不明白为什么它不能使用加密功能。

bool key\u ok=rsa.Validate(CryptoPP::NullRNG(),15)
”-我不确定这是否正确。我认为您需要的是真正的PRNG,而不是
NullRNG
。这是因为有些测试是概率测试。此外,您可以使用的最高级别是3,而不是15。请参见。另请参见Crypto++wiki上的。不过,不建议这样做。“
bool key\u ok=rsa.Validate(CryptoPP::NullRNG(),15)
”-我不确定这是否正确。我认为您需要的是真正的PRNG,而不是
NullRNG
。这是因为有些测试是概率测试。此外,您可以使用的最高级别是3,而不是15。请参见。另请参见Crypto++wiki上的。但是不建议这样做。
a_exp_b_mod_c
执行幂运算,但不应用填充。这意味着一个小指数可能会泄露信息;如果同一条消息被加密两次,攻击者就会知道它。使用更高级别的对象和OAEP填充可能更好。
a_exp_b_mod_c
执行幂运算,但不应用填充。这意味着一个小指数可能会泄露信息;如果同一条消息被加密两次,攻击者就会知道它。使用更高级别的对象和OAEP填充可能更好。