好吧,这些天我一直在经历我的个人地狱

我在解密使用RSA加密的消息时遇到了一些麻烦,我总是会因“ RSA/OAEP-MGF1(SHA-1):无效的Ciphertext”而失败。

  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)
        )
    );
    

据我所知,该消息应该在没有任何问题的情况下进行解析。 ciphertext是一个std :: string,因此末尾没有 0,可以做一些意外的事情。

我只是有什么东西,如果私钥不正确,但是无论如何都可以加载而不会丢弃BER解释错误。解密时会有什么?

希望任何人都可以为此提供一些启示。

干杯

有帮助吗?

解决方案

如果键实际损坏,则负载函数应该失败。但是,您可以通过打电话来要求自我测试本身的钥匙来检测任何腐败 Validate, , 喜欢:

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

第二个参数(此处,3)指定要进行多少检查。对于RSA,这将导致其运行所有可用的测试,即使是缓慢/昂贵的测试。

解码失败的另一个原因是,如果密钥不是用于加密原始消息的密钥。

显然,密文的输入必须与最初在加密侧产生的完全相同。对于调试,检查此问题的一种好方法是将两侧的密文馈送到哈希功能中(当然可以方便地可以使用)并比较输出。如果您的十六进制或base64编码了密文以进行传输,则必须在将其交给RSA解密器之前撤消。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top