Hãy thử điều này:
class Program
{
static byte[] Sign(string message, RSAParameters key)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(key);
byte[] toSign = Encoding.Unicode.GetBytes(message);
return rsa.SignData(toSign, "SHA1");
}
static bool Verify(string message, byte[] signature, RSAParameters key)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(key);
byte[] toVerify = Encoding.Unicode.GetBytes(message);
return rsa.VerifyData(toVerify, "SHA1", signature);
}
static void Main(string[] args)
{
string message = "Let's sign this message.";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); // Creates a new RANDOM key.
RSAParameters privatekey = rsa.ExportParameters(true);
RSAParameters publickey = rsa.ExportParameters(false);
byte[] signature = Sign(message, privatekey);
if (Verify(message, signature, publickey))
{
Console.WriteLine("It worked!");
}
}
}
Điều quan trọng cần lưu ý là public/private cặp khóa mới được tạo ra mỗi khi bạn khởi động chương trình này. Để thực hiện những gì bạn muốn, bạn sẽ muốn lưu cặp khóa công khai/riêng tư trước khi sử dụng nó ở cả hai đầu. Khóa công khai của bạn là điều duy nhất bạn cần xác minh, vì vậy khóa riêng tư của bạn sẽ không được công bố cho khách hàng.
Bạn có thể muốn xem xét ExportParameters hoặc ExportCspBlob để hoàn thành việc lưu/tải cặp khóa công khai/riêng tư.
Nguồn
2009-04-06 11:35:58
Tôi không muốn ký một hội đồng. Tôi muốn tạo một giá trị trong một tệp để tránh giả mạo các giá trị trong tệp đó. – Riri