一个简单的使用.NET非对称加密算法(RSA)的例子

非对称加密算法过程
  (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
  (2)甲方获取乙方的公钥,然后用它对信息加密。
  (3)乙方得到加密后的信息,用私钥解密。
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

  

直接上代码
  
  class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();
            c.StartDemo();
        }
    }


    public class Class1
    {
        /// <summary>
        /// RSA的加解密过程:
        /// 有 rsa1 和 rsa2 两个RSA对象。
        /// 现在要 rsa2 发送一段信息给 rsa1, 则先由 rsa1 发送“公钥”给 rsa2
        /// rsa2 获取得公钥之后,用来加密要发送的数据内容。
        /// rsa1 获取加密后的内容后,用自己的私钥解密,得出原始的数据内容。
        /// </summary>
        public void StartDemo()
        {
            RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
            RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider();

            string publickey = rsa1.ToXmlString(false); //导出 rsa1 的公钥

            String plaintext = "你好吗?这是用于测试的字符串。";   //原始数据
            Console.WriteLine("原始数据是:\n{0}\n", plaintext);


            rsa2.FromXmlString(publickey); //rsa2 导入 rsa1 的公钥,用于加密信息
            //rsa2开始加密
            byte[] cipherbytes = rsa2.Encrypt(Encoding.UTF8.GetBytes(plaintext), false);

            /*//////////////////////////////////////////////*/
            Console.WriteLine("加密后的数据是:");
            for (int i = 0; i < cipherbytes.Length; i++)
            {
                Console.Write("{0:X2}", cipherbytes[i]);
            }
            Console.Write("\n");


            /*//////////////////////////////////////////////*/
            //rsa1开始解密
            byte[] palinbytes = rsa1.Decrypt(cipherbytes, false);
            Console.WriteLine("解密后的数据是:");
            Console.Write(Encoding.UTF8.GetString(palinbytes));

            Console.Read();

        }
    }

运行结果:

  

 

posted on 2013-07-04 15:31  骄傲的豹子  阅读(611)  评论(0编辑  收藏  举报

导航