我有一個消息用.Net RSACryptoServiceProvider簽名,然後將消息發送到 Python軟件,它試圖用m2crypto(基於openssl的lib)驗證符號。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"));
所以sended到接收器的簽名是
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本身的消息,編碼簽名,發送,然後解碼和驗證一切正常......
我將不勝感激任何註釋!
謝謝Jcs - 我剛剛找到了你的答案。我的客戶向我提供了兩次消息......但他的IT部門忘了告訴我這件事.. – sebzur 2016-01-19 09:41:21