SHA-1 をハッシュ関数として使用し、PKCS#1 パディングをパディング スキームとして使用して、スマート カード リーダーと正常にインターフェイスする C++ のプログラムから、一部のデータの RSA 署名を生成しています。java.security パッケージを使用した単純な Java アプリケーションで署名をすばやく検証でき、問題なく動作します。
しかし、OpenSSL の EVP_PKEY_verify() を使用しようとすると、パスしません。EVP_PKEY_verify_recover() を使用し、元のデータのハッシュ (単純なコマンド ライン呼び出しによる) と verify_recover の結果を比較すると、ほぼ同じ結果が得られます。
SHA1(オリジナル) = xyz 回復 (署名) = xyz0000000000...
誰かが以前にこの問題に遭遇したことがあるかどうか疑問に思っていますか? 私はしばらくの間それと戦ってきました。さまざまなオプションを試し、sign() 関数 (Java では問題なく動作します) で遊んでいます。
ありがとう!