2012-10-16 31 views
5

Tôi mới sử dụng C#. Tôi được yêu cầu mã hóa một chuỗi trước khi tôi đăng thông tin đó lên một URL bên ngoài. Tất cả những gì tôi nhận được là đầu vào từ ứng dụng bên ngoài đó là tệp .der và tệp .pem. Họ yêu cầu tôi gửi thông tin được mã hóa (chuỗi) để họ có thể giải mã.mã hóa C#, có tệp .der và .pem làm đầu vào

Tôi đã đọc rất nhiều bài đăng nhưng không thể nhận được câu trả lời chính xác về cách tôi có thể giải quyết vấn đề này.

Tôi đang sử dụng đoạn mã bên dưới để đọc tệp .pem và tạo chứng chỉ. Nhưng trên X509Certificate2 mới (certBuffer); đường ném cho tôi lỗi "không thể tìm thấy đối tượng được yêu cầu". Tôi không chắc mình có đi đúng hướng hay không. Nếu có, hãy giúp tôi tìm ra vấn đề. Người khác chỉ cho tôi một cách. Cảm ơn trước!

công trình
var pem = System.IO.File.ReadAllText("C:\\Users\\bvarapr1\\Desktop\\fordsync\\public_qa.pem"); 
    byte[] certBuffer = GetBytesFromPEM(pem, "PUBLIC KEY"); 
    var certificate = new X509Certificate2(certBuffer);    
    RSACryptoServiceProvider provider = (RSACryptoServiceProvider)certificate.PrivateKey; 
    string testString = "DIGITALMOON"; 
    string encryptedVIN = RSAEnc(provider, testString); 

    byte[] GetBytesFromPEM(string pemString, string section) 
    { 
     var header = String.Format("-----BEGIN {0}-----", section); 
     var footer = String.Format("-----END {0}-----", section); 

     var start = pemString.IndexOf(header, StringComparison.Ordinal) + header.Length; 
     var end = pemString.IndexOf(footer, start, StringComparison.Ordinal) - start; 

     if (start < 0 || end < 0) 
     { 
      return null; 
     } 

     return Convert.FromBase64String(pemString.Substring(start, end)); 
    } 

Trả lời

8
static void Main(string[] args) 
{ 
    System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); 
    System.Security.Cryptography.RSAParameters rsaParam = rsa.ExportParameters(false); 
    rsaParam.Modulus = Convert.FromBase64String(System.IO.File.ReadAllText(@"C:\keys\public_key.pem").Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", "")); 
    rsa.ImportParameters(rsaParam); 

    string msg = "This is a test."; 
    byte[] encValue = rsa.Encrypt(Encoding.UTF8.GetBytes(msg), false); 

    Console.WriteLine("Message Before Encryption: " + msg); 
    Console.WriteLine("Encrypted Message:\r\n" + Convert.ToBase64String(encValue)); 

    Console.WriteLine("\r\nPress any key to exit."); 
    Console.ReadKey(); 
} 
+2

Mã này tạo cho tôi, nhưng tập tin PEM của bạn sẽ cần phải chỉ chứa khóa công khai. Tôi không biết khóa công khai của bạn được tạo ra như thế nào, nhưng tôi đã sử dụng "openssl genrsa -out private_key.pem 1024". Sau đó, tôi đã sử dụng "openssl rsa -in private_key.pem -pubout -out public_key.pem" để xuất khóa công khai để sử dụng trong mã ở trên. – Jacob

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