crypto ++ RSA和“无效密文”

时间:2009-12-04 14:48:56

标签: c++ cryptography crypto++

好吧,这些天我一直在经历个人的痛苦

我在解密使用加密的邮件时遇到了一些问题 RSA和我总是失败的“RSA / OAEP-MGF1(SHA-1):无效 密文“

  1. 我有一个在base64中编码的私钥,我加载它:

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. 然后我通过执行以下操作来解码消息:

    RSAES_OAEP_SHA_Decryptor decryptor(private_key);
    
    AutoSeededRandomPool rng;
    
    string result;
    StringSource(ciphertext, true,
        new PK_DecryptorFilter(rng, decryptor,
            new StringSink(result)
        )
    );
    
  3. 据我所知,消息应该被解析而没有任何消息 问题。密文是一个std :: string,所以最后没有\ 0可以 做一些意想不到的事。

    我只是想要一些东西,如果私钥不正确怎么办? 但无论如何都可以加载而不会丢失BER解码错误。什么 在解密时会抛出吗?

    希望任何人都能对此有所了解。

    干杯

1 个答案:

答案 0 :(得分:0)

如果密钥实际已损坏,则Load函数应该失败。但是,您可以通过调用Validate来请求密钥进行自我测试,以便检测到任何损坏,如:

bool key_ok = private_key.Validate(rng, 3);

第二个参数(此处为3)指定要完成的检查次数。对于RSA,这将导致它运行所有可用的测试,即使是慢速/昂贵的测试。

解码可能失败的另一个原因是密钥不是用于加密原始邮件的密钥。

显然,密文输入必须与加密端最初生成的密文输入完全相同。对于调试,检查这个的一个好方法是将两侧的密文提供给哈希函数(当然已经方便地为您提供)并比较输出。如果您使用十六进制或base64编码密文进行传输,则必须在将其提供给RSA解密器之前将其撤消。