gpt4 book ai didi

c++ - 密码++ RSA和 "invalid ciphertext"

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:12 24 4
gpt4 key购买 nike

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

我在解密使用 加密的消息时遇到了一些问题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)
    )
    );

据我所知,应该在没有任何内容的情况下解析消息问题。密文是一个 std::string,所以末尾没有\0做一些意想不到的事情。

我只是想到了一些事情,如果私钥不正确怎么办但无论如何都可以加载而不会引发 BER 解码错误。什么解密时会抛出吗?

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

干杯

最佳答案

如果 key 实际上已损坏,则加载函数应该失败。但是,您可以通过调用 Validate 要求 key 进行 self 测试,这应该可以检测到任何损坏,例如:

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

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

解码可能失败的另一个原因是 key 不是用于加密原始消息的 key 。

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

关于c++ - 密码++ RSA和 "invalid ciphertext",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com