2009-04-06 28 views
6

Làm cách nào để ký một tệp bằng .NET và làm cách nào để tôi xác thực rằng khóa đã tạo là khóa hợp lệ khi tôi đọc nó?Đăng nhập một tập tin bằng khóa riêng trong .NET

Mục tiêu của tôi là có tệp văn bản có một số giá trị và khóa được tạo. Sau đó, tôi muốn có thể kiểm tra khóa được tạo trong tệp để không ai làm giả mạo các giá trị trong tệp khi tôi gửi tệp cho khách hàng.

Cập nhật: Tìm thấy nó here với một số trợ giúp từ câu trả lời.

Trả lời

-2

Bạn có hai khả năng:

  • Khi là về tài sản dự án vào tùy chọn Sign.
  • Thứ hai là sửa đổi các tập tin AssemblyInfo.cs và thêm các lệnh để sử dụng các sn tạo: [assembly: AssemblyKeyFile("..\\..\\SN_Generated.snk")]
+2

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

3

Nếu bạn muốn đăng nhập một hội đồng, jaloplo đã đưa ra giải pháp.

Nếu bạn muốn ký một số tệp do chương trình của bạn tạo, hãy xem trong không gian tên System.Security.Cryptography.

6

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ư.

Các vấn đề liên quan