Ich habe viele Foren und Beispiele durchgesehen, aber keine hat mir geholfen. Ich muss die Signatur von jedem Webservice überprüfen. Ich habe test.crt Datei mit öffentlichem Schlüssel für überprüfen.So überprüfen Sie die Signatur und laden den öffentlichen Schlüssel aus der CRT-Datei?
static bool Verify(string text, string signature)
{
X509Certificate2 cert = new X509Certificate2(
HttpContext.Current.Server.MapPath("test-server.cert"));
RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PublicKey.Key;
// Hash the data
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] sign = Convert.FromBase64String(signature);
byte[] hash = sha1.ComputeHash(data);
return csp.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), sign);
}
Aber Ergebnis ist immer falsch :(
Ich habe ein OpenSSL. Beispiel:
openssl base64 -d -in signature -out signature.bin
openssl dgst -sha1 -verify test-server.pub -signature signature.bin from_gateway
habe ich eine einfache Anwendung, die eine Signatur für einen Text erzeugt und überprüft es sofort. Sie können es hier überprüfen: https://dl.dropbox.com/u/1171045/11221877/Program.cs –
So ist die obige Methode eher in Ordnung. Sind Sie sicher, dass Sie richtige Zertifikate zum Signieren und Verifizieren verwenden? –
Ich habe das gleiche mit der Web-App gemacht, also ist es keine Web-Sache. Wie übermittelst du eine Signatur vom Webservice an deine App? –