.Net RSACryptoServiceProviderで署名されたメッセージを受け取りました。メッセージは、m2crypto(opensslベースのlib)で署名を検証しようとするPythonソフトウェアに送信されます。
メッセージが署名された秘密鍵のペアである公開証明書を持っています。
.Netソフトウェアがsingを送信する前に、ByteArrayToStringを使用して変換します。これは、符号が次のコードで生成されるためです。
//Convert plain text into a byte array to sign.
byte[] data = new UTF8Encoding().GetBytes(phrase);
SHA1Managed sha1 = new SHA1Managed();
byte[] hashBytes = sha1.ComputeHash(data);
byte[] sig = csp.SignData(hashBytes, CryptoConfig.MapNameToOID("SHA1"));
したがって、受信者に送信される署名は
ByteArrayToString(sig)
Pythonの部分は次のとおりです。
def verify(message, signature, cert_path):
msg = hashlib.sha1(message).hexdigest()
certificate = M2Crypto.X509.load_cert(cert_path)
pubkey = certificate.get_pubkey()
pubkey.reset_context(md='sha1')
pubkey.verify_init()
pubkey.verify_update(msg)
sgn = signature.decode('base64')
is_verified = pubkey.verify_final(sgn)
そして、検証を取得できません... Python部分の署名エンコーディングに問題がある可能性があると思いますが、誰かがここで他のバグを見ることができるかもしれませんか?
自分の証明書(opensslで生成されたもの)を使用してPython自体からのメッセージに署名し、署名をエンコードして送信し、デコードしてすべてが正常に機能していることを確認する場合...
コメントをいただければ幸いです。