6

クライアントおよびサーバーとの通信に公開鍵暗号を使用しようとしています。サーバーは 1024 ビットの公開鍵を生成し、それをクライアントに送信することになっています。クライアントはその鍵を使用して、暗号化されたデータをサーバーに送り返します。これまでのところ、RSACryptoServiceProvider を次のように初期化しました。

RSACryptoServiceProvider rsaEncryption = new RSACryptoServiceProvider(1024);

ExportParametersこれで、RSACryptoServiceProvider から指数とモジュラスを取得できることがわかりました。ただし、このデータを使用して公開鍵をクライアントに送り返すにはどうすればよいでしょうか (これも を使用しますRSACryptoServiceProvider)、クライアントはこのデータを使用して何かを暗号化して送り返すにはどうすればよいでしょうか? それとも私はこれを完全に間違っていますか?

4

2 に答える 2

22

あなたのロジックは問題ないようで、サンプルコードだけが必要なようです。

    using System;
    using System.Security.Cryptography;
    using System.Text;

    namespace RSA
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    var rsaServer = new RSACryptoServiceProvider(1024);
                    var publicKeyXml = rsaServer.ToXmlString(false);

                    var rsaClient = new RSACryptoServiceProvider(1024);
                    rsaClient.FromXmlString(publicKeyXml);

                    var data = Encoding.UTF8.GetBytes("Data To Be Encrypted");

                    var encryptedData = rsaClient.Encrypt(data, false);
                    var decryptedData = rsaServer.Decrypt(encryptedData, false);

                    Console.WriteLine(Encoding.UTF8.GetString(decryptedData));

                    Console.WriteLine("OK");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.Read();
            }
        }
    }
于 2012-12-26T23:46:29.813 に答える