题
好吧,这些天我一直在经历我的个人地狱
我在解密使用RSA加密的消息时遇到了一些麻烦,我总是会因“ RSA/OAEP-MGF1(SHA-1):无效的Ciphertext”而失败。
我在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) ) );
据我所知,该消息应该在没有任何问题的情况下进行解析。 ciphertext是一个std :: string,因此末尾没有 0,可以做一些意外的事情。
我只是有什么东西,如果私钥不正确,但是无论如何都可以加载而不会丢弃BER解释错误。解密时会有什么?
希望任何人都可以为此提供一些启示。
干杯
解决方案
如果键实际损坏,则负载函数应该失败。但是,您可以通过打电话来要求自我测试本身的钥匙来检测任何腐败 Validate
, , 喜欢:
bool key_ok = private_key.Validate(rng, 3);
第二个参数(此处,3)指定要进行多少检查。对于RSA,这将导致其运行所有可用的测试,即使是缓慢/昂贵的测试。
解码失败的另一个原因是,如果密钥不是用于加密原始消息的密钥。
显然,密文的输入必须与最初在加密侧产生的完全相同。对于调试,检查此问题的一种好方法是将两侧的密文馈送到哈希功能中(当然可以方便地可以使用)并比较输出。如果您的十六进制或base64编码了密文以进行传输,则必须在将其交给RSA解密器之前撤消。
不隶属于 StackOverflow