5

私はC#が初めてです。外部 URL に情報を投稿する前に、文字列を暗号化するよう求められます。その外部アプリケーションからの入力として取得したのは、.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));
    }
4

1 に答える 1

9
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();
}
于 2012-10-16T16:02:53.467 に答える