Pythonで実行されているサーバーがあり、m2cryptoを使用してメッセージsha256ダイジェストに署名しています。openssl CLIによって生成された公開および秘密RSAキーを使用しています。サーバー側では、すべてが問題ありません
Pythonコード:
privateKey = M2Crypto.RSA.load_key (sys.argv[2])
signedDigest = privateKey.sign (ダイジェスト、「sha256」)
署名が適切であることを再確認します。
pubKey = M2Crypto.RSA.load_pub_key("key.pub.pem")
if pubKey.verify(digest, signedDigest, 'sha256') (など....)
署名済みの sha256 ダイジェストをファイルに保存し、元のメッセージと共にクライアントに送信します。
クライアント側では、c++ vc6 で実行され、署名済みの sha256 ダイジェスト (バイナリとして) と署名済みのメッセージを読み込みます。ここでの目的は、署名付きの sha256 と共にメッセージを検証することです。静的リンクとして cryptopp を使用していますが、sha256 を計算し、Python の sha256 と比較して同じ結果を得ることができるため、正常に動作することがわかっています。コードは次のとおりです。
RSA::公開鍵 pubKey;
pubKey.Load( FileSource(LicenseControl::pubKeyPath, true));
RSASS< PKCS1v15, SHA >::検証者 検証者(pubKey);
//shaDigest は新しく計算された sha256、signatureByte はサーバーから受信したメッセージの署名です。
result = verifier.VerifyMessage( shaDigest, CryptoPP::SHA256::DIGESTSIZE, signatureByte, 512);
これはコンパイルして実行しますが、常に false を返します。署名が有効であることを確認するために、openssl CLI を直接使用して検証しました (m2crypto python ラッパー経由ではありません)。
openssl dgst -sha256 -verify key.pub.pem -signature sign original_file
検証済み OK
これにより、署名された sha256 ダイジェストが問題なく、公開鍵を使用してメッセージを正常に検証できることが確認されます。DER および PEM 形式を認識しています (openssl には PEM、cryptop には DER を使用)。したがって、公開鍵は正しいと思います。今私の問題は、暗号化ライブラリを使用して署名を検証する方法です??? 私はドキュメントを読みましたが、何日も経った後でも、まだ中国語のように見えます. 私は次のようなことを試しました
RSASS< PSSR、SHA >::Verifier verifier(pubKey);
PSSR を使用して Python コードで暗号化しますが、運はありません...署名された sha256 ダイジェストを公開鍵でのみ復号化し、受信ファイルから計算された新しい sha256 ダイジェストと比較することを検討しています。しかし、その単純でさえ、ドキュメントには見つかりませんでした...ベリファイアを適切に使用する方法はありますか?
公開鍵を使用して復号化する方法は? 前の質問が解決できない場合