У меня есть сообщение с подписью .Net RSACryptoServiceProvider, затем сообщение отправляется программному обеспечению Python, которое пытается проверить знак с помощью m2crypto (lib на основе openssl).
У меня есть открытый сертификат, чтоявляется парой для закрытого ключа, с которым было подписано сообщение.
Перед тем как программа .Net отправляет сигнал, она преобразует его с помощью 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, кодирую подпись, отправляю ее,затем расшифруйте и убедитесь, что все работает нормально ...
Буду признателен за любые комментарии!