好吧,这些天我一直在经历自己的地狱

我在解密使用加密的消息时遇到一些麻烦
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/

10-09 06:10