我正在使用 SHA-1 作为哈希函数,使用 PKCS#1 填充作为填充方案,从成功与智能卡读卡器接口的 C++ 程序中生成一些数据的 RSA 签名。我可以使用 java.security 包通过一个简单的 Java 应用程序快速验证签名,而且效果很好。
但是,当我尝试使用OpenSSL的EVP_PKEY_verify()时,它没有通过。如果我使用 EVP_PKEY_verify_recover(),并且比较原始数据的哈希值(通过简单的命令行调用)和 verify_recover 的结果,我会得到〜几乎〜相同的结果。
SHA1(原始)= xyz 恢复(签名)= xyz0000000000...
我想知道是否有人遇到过这个问题?我已经为此奋斗了一段时间,尝试不同的选项并使用我的sign()函数(对于Java来说效果很好)。
谢谢!
事实证明,如果您只使用 EVP_VerifyInit()/EVP_VerifyUpdate()/EVP_VerifyFinal() 代替,它就可以工作。希望这可以为其他人节省几天时间!