2012-10-16 15 views
5

私はC#を初めて使用しています。私はその情報を外部のURLに投稿する前に文字列を暗号化するように求められます。その外部アプリケーションからの入力として得られたのは、.derファイルと.pemファイルでした。彼らは暗号化された(文字列)情報を送信して、復号化できるようにしました。c#暗号化、入力として.derと.pemファイルがある

私は多くの投稿を読んだが、これをどのように解決できるかについて正確な答えを得ることができなかった。

以下のコードスニペットを使用して.pemファイルを読み取り、証明書を作成しています。しかし、に新しいX509Certificate2(certBuffer);「要求されたオブジェクトが見つかりません」というエラーが表示される行。私が正しい方向に向かっているかどうかはわかりません。はいの場合は、問題を把握するのに役立ちます。それ以外の方法は私に見せてください。前もって感謝します!

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

答えて

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

このコードの作品は私を形成するが、あなたのPEMファイルは、公開鍵のみを含める必要があります。私はあなたの公開鍵がどのように生成されたか分かりませんが、 "openssl genrsa -out private_key.pem 1024"を使用しました。次に、上記のコードで使用する公開鍵をエクスポートするために "openssl rsa -in private_key.pem -pubout -out public_key.pem"を使用しました。 – Jacob

関連する問題