繁体   English   中英

crypto++ RSA 和“无效密文”

[英]crypto++ RSA and "invalid ciphertext"

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

我在解密使用 RSA 加密的消息时遇到了一些问题,并且总是以“RSA/OAEP-MGF1(SHA-1): invalid 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) ) );

据我所知,应该毫无问题地解析消息。 密文是一个 std::string,所以最后没有 \0 可能会做一些意想不到的事情。

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

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

干杯

如果密钥实际上已损坏,则加载功能应该失败。 但是,您可以通过调用Validate来询问自检密钥,这应该检测到任何损坏,例如:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM