非对称加密算法过程
(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(); } }
运行结果: