好吧,这些天我一直在经历个人的痛苦
我在解密使用加密的邮件时遇到了一些问题 RSA和我总是失败的“RSA / OAEP-MGF1(SHA-1):无效 密文“
我有一个在base64中编码的私钥,我加载它:
RSA::PrivateKey private_key;
StringSource file_pk(PK,true,new Base64Decoder);
private_key.Load( file_pk );
然后我通过执行以下操作来解码消息:
RSAES_OAEP_SHA_Decryptor decryptor(private_key);
AutoSeededRandomPool rng;
string result;
StringSource(ciphertext, true,
new PK_DecryptorFilter(rng, decryptor,
new StringSink(result)
)
);
据我所知,消息应该被解析而没有任何消息 问题。密文是一个std :: string,所以最后没有\ 0可以 做一些意想不到的事。
我只是想要一些东西,如果私钥不正确怎么办? 但无论如何都可以加载而不会丢失BER解码错误。什么 在解密时会抛出吗?
希望任何人都能对此有所了解。
干杯
答案 0 :(得分:0)
如果密钥实际已损坏,则Load函数应该失败。但是,您可以通过调用Validate
来请求密钥进行自我测试,以便检测到任何损坏,如:
bool key_ok = private_key.Validate(rng, 3);
第二个参数(此处为3)指定要完成的检查次数。对于RSA,这将导致它运行所有可用的测试,即使是慢速/昂贵的测试。
解码可能失败的另一个原因是密钥不是用于加密原始邮件的密钥。
显然,密文输入必须与加密端最初生成的密文输入完全相同。对于调试,检查这个的一个好方法是将两侧的密文提供给哈希函数(当然已经方便地为您提供)并比较输出。如果您使用十六进制或base64编码密文进行传输,则必须在将其提供给RSA解密器之前将其撤消。