2012-10-16 5 views
5

Ich bin neu in C#. Ich werde aufgefordert, eine Zeichenfolge zu verschlüsseln, bevor ich diese Informationen an eine externe URL weitergebe. Alles, was ich als Eingabe von dieser externen Anwendung bekam, war eine .der-Datei und eine .pem-Datei. Sie haben mich gebeten, die verschlüsselten (String-) Informationen zu senden, damit sie entschlüsseln können.C# Verschlüsselung, habe .der und .pem Dateien als Eingabe

Ich habe viele Beiträge gelesen, konnte aber nicht die genaue Antwort darauf bekommen, wie ich das lösen kann.

Ich benutze das folgende Code-Snippet, um die .pem-Datei zu lesen und ein Zertifikat zu erstellen. Aber auf neue X509Certificate2 (certBuffer); Zeile wirft mich ein "kann das angeforderte Objekt nicht finden" -Fehler. Ich bin mir nicht sicher, ob ich in die richtige Richtung gehe. Wenn ja, hilf mir, das Problem herauszufinden. Sonst zeig mir einen Weg. Danke im Voraus!

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)); 
    } 

Antwort

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

Dieser Code funktioniert bilden mich, aber Ihre PEM-Datei wird nur der öffentliche Schlüssel enthalten müssen. Ich bin mir nicht sicher, wie Ihr öffentlicher Schlüssel generiert wurde, aber ich habe "openssl genrsa -out private_key.pem 1024" verwendet. Dann habe ich "openssl rsa -in private_key.pem -pubout-out public_key.pem" verwendet, um den öffentlichen Schlüssel für den obigen Code zu exportieren. – Jacob

Verwandte Themen