У меня есть сообщение, подписанное с .Net RSACryptoServiceProvider, сообщение затем отправляется в Программное обеспечение Python, которое пытается проверить знак с помощью m2crypto (libs на основе openssl).RSACryptoServiceProvider проверка подписи сообщения с m2crypto
У меня есть открытый сертификат, который является парой для секретного ключа, с которым было подписано сообщение.
Перед программное обеспечение .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)
И я не могу получить достоверность ion ... Я думаю, что может быть проблема с кодировкой подписи в части Python, но, может быть, кто-то может увидеть какие-то другие ошибки здесь?
Когда я использую свой собственный сертификат (созданный с помощью OpenSSL) и подписать сообщение от самого Python, закодировать подпись, отправить его, а затем расшифровать и проверить, что все работает нормально ...
Я был бы признателен за любые Комментарии!
Спасибо Jcs - Я только что нашел ваш ответ. Мой клиент предоставил мне сообщение, в котором дважды звучало ... но его ИТ-подразделение забыло сообщить мне об этом. – sebzur