Tôi đã xem xét nhiều diễn đàn và ví dụ, nhưng không có ai giúp tôi. Tôi cần xác minh chữ ký từ bất kỳ dịch vụ web nào. Tôi có tệp test.crt với khóa công khai để xác minh.Cách xác minh chữ ký, tải khóa công khai từ tệp CRT?
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);
}
Nhưng kết quả luôn luôn là sai :(
Tôi có một ví dụ OpenSSL:.
openssl base64 -d -in signature -out signature.bin
openssl dgst -sha1 -verify test-server.pub -signature signature.bin from_gateway
Tôi tạo ra một ứng dụng đơn giản mà tạo ra một chữ ký cho một văn bản và ngay lập tức kiểm tra nó. Bạn có thể kiểm tra tại đây: https://dl.dropbox.com/u/1171045/11221877/Program.cs –
Vì vậy, phương pháp trên khá ổn. Bạn có chắc chắn rằng bạn đang sử dụng chứng chỉ phù hợp để ký và xác minh không? –
Tôi đã làm tương tự với ứng dụng web, vì vậy nó không phải là một điều web. Làm thế nào để bạn vượt qua một chữ ký từ dịch vụ web cho ứng dụng của bạn? –