2012-10-16 3 views
5

저는 C#을 처음 사용합니다. 외부 URL에 정보를 게시하기 전에 문자열 암호화를 요청받습니다. 외부 응용 프로그램에서 입력 한 모든 것은 .der 파일과 .pem 파일입니다. 그들은 암호 해독 할 수 있도록 암호화 된 (문자열) 정보를 보내달라고 요청했습니다.C# 암호화, .der 및 .pem 파일을 입력으로 사용합니다.

나는 많은 게시물을 읽었지만 어떻게 해결할 수 있는지에 대한 정확한 답을 얻을 수 없었다.

다음 코드 스니 j을 사용하여 .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

관련 문제