Я пытаюсь создать систему проверки подписи, которая использует мой сайт, который работает на API Google с помощью PyCrypto Engine. Программа, которая генерирует подпись довольно проста:PyCrypto Sign Message and Verify Signature в .NET RSACryptoServiceProvider
from Crypto.PublicKey import RSA
from Crypto.Hash import MD5
def sign(key, message):
digest = MD5.new(message).digest()
signature = key.sign(digest, None)[0]
signature = hex(signature).replace("0x","").replace("L","").upper()
if len(signature) % 2==1:
signature = "0" + sig
return signature
Ключ «ключ» обеспечивается:
RSA.construct((m, e, d, p, q))
подпись возвращается в виде шестнадцатеричной строки, например: «A12D ... ....»
программа .NET является:
Private Function Verify(ByVal message As String, ByVal sign As String) As Boolean
Dim md5 As New MD5CryptoServiceProvider
Dim f As New StreamReader("D:/KEY.XML")
Dim xml As String = f.ReadToEnd
f.Close()
Dim rsa As New RSACryptoServiceProvider
rsa.FromXmlString(xml)
Dim msg_as_bytes As Byte() = Encoding.Default.GetBytes(message)
Dim hash_as_bytes As Byte() = md5.ComputeHash(msg_as_bytes)
''Dim sig_as_bytes As Byte() = convtobytes(sign)
Dim sig_as_bytes As Byte() = New Byte(sign.Length/2 - 1) {}
For i As Integer = 1 To sign.Length/2
sig_as_bytes(i - 1) = CByte("&H" & Mid(sign, (i - 1) * 2 + 1, 2))
Next
Return rsa.VerifyData(hash_as_bytes, "SHA1", sig_as_bytes)
End Function
Но это не работает !!! Зачем??
PyCrypto и .NET получают одни и те же параметры (модуль, показатель, д, р, д)
не работает ... rsa.VerifyData (hash_as_bytes, "MD5", sig_as_bytes) –
BitConverter.ToString (rsa.SignData (hash_as_bytes, «MD5»)) Замените («-», «») не равным значению, возвращаемому функцией python .... –
Цифровая подпись с использованием дополнения RSA (например, PKCS # 1 или OAEP), который включает случайные данные. Таким образом, вы не можете ожидать того же значения из 'SignData' – poupou