好吧,这些天我一直在经历自己的地狱
我在解密使用加密的消息时遇到一些麻烦
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解码错误。什么
解密时会扔吗?
希望任何人都能对此有所了解。
干杯
最佳答案
如果密钥实际上已损坏,则加载功能应该已经失败。但是,您可以通过调用Validate
来要求密钥进行自我测试,该密钥应检测到任何损坏,例如:
bool key_ok = private_key.Validate(rng, 3);
第二个参数(此处为3)指定要执行的检查数量。对于RSA,这将导致它运行所有可用的测试,甚至是慢速/昂贵的测试。
解码可能失败的另一个原因是,如果密钥根本不是用于加密原始消息的密钥。
显然,密文输入必须与加密端最初产生的密文完全相同。对于调试,一种检查此错误的好方法是将两边的密文输入一个哈希函数(当然,您已经很方便地使用它)并比较输出。如果您使用十六进制或base64编码的密文进行传输,则必须先取消加密,然后再将其提供给RSA解密器。
关于c++ - crypto++ RSA和“无效密文”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1847410/