2012-10-16 24 views
5

C# 'da yeniyim. Bu bilgiyi harici bir URL'ye göndermeden önce bir dizgiyi şifrelemem istenir. Bu dış uygulamadan girdi olarak aldığım her şey bir .der dosyası ve bir .pem dosyasıydı. Şifrelenmiş (dize) bilgileri göndermelerini istediler, böylece şifresini çözebilirler.C# şifreleme, girdi olarak .der ve .pem dosyaları girdi olarak

Çok sayıda yazı okudum, ancak bunu nasıl çözebileceğimin tam cevabını alamadım.

.pem dosyasını okumak ve bir sertifika oluşturmak için aşağıdaki kod snippet'ini kullanıyorum. Ancak yeni X509Certificate2'de (certBuffer); satırı "istenen nesneyi bulamıyor" hatası veriyor. Doğru yönde gidiyorum emin değilim. Varsa, sorunu çözmeme yardımcı olun. Else bana bir yol gösterir. Şimdiden teşekkürler!

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

cevap

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

Bu kod çalışır beni oluştururlar, ancak PEM dosyası sadece genel anahtarı içermesi gerekir. Genel anahtarın nasıl üretildiğini bilmiyorum ama "openssl genrsa -out private_key.pem 1024" kullandım. Sonra, yukarıdaki kodda kullanılmak üzere genel anahtarı vermek için "openssl rsa -in private_key.pem -pubout -out public_key.pem" kullanılır. – Jacob