RSA 实际应用中是:接收方产生公钥和私钥,发送方用其公钥加密,再把加密后的内容发送给接收方。
CspParameters 的名称空间是:
System.Security.Cryptography
CspParameters cpSend = new CspParameters(); //Csp = Cryptography Service Provider CspParameters cpReceive = new CspParameters(); cpSend.KeyContainerName = "SendTestContainer"; cpReceive.KeyContainerName = "ReceiveTestContainer"; RSACryptoServiceProvider rsaSend = new RSACryptoServiceProvider(cpSend); ; RSACryptoServiceProvider rsaReceive = new RSACryptoServiceProvider(cpReceive); rsaSend.FromXmlString(rsaReceive.ToXmlString(false)); //发送方使用接收方给它的公钥进行加密 string plaintext = "前几天我碰到一个朋友,约我跟马贼打架,我立马答应了他,因为我觉得这件事好无聊。"; byte[] ciphertext = rsaSend.Encrypt(System.Text.Encoding.UTF8.GetBytes(plaintext), false); //加密后 byte[] decryption = rsaReceive.Decrypt(ciphertext, false); //解密后 lbl.Width = 760; lbl.Text = ""; lbl.Text += Convert.ToBase64String(ciphertext) + "<br />"; //显示加密后的 lbl.Text += System.Text.Encoding.UTF8.GetString(decryption) + "<br />"; //显示解密后的 lbl.Text += Server.HtmlEncode(rsaSend.ToXmlString(false)) + "<br />"; //显示发送方公钥 lbl.Text += Server.HtmlEncode(rsaReceive.ToXmlString(true)) + "<br />"; //显示接收方公钥和私钥 lbl.Text += Server.HtmlEncode(rsaReceive.ToXmlString(false)) + "<br />"; //显示接收方公钥 rsaSend.PersistKeyInCsp = true; //密钥要保存起来 //rsaSend.Clear(); rsaReceive.PersistKeyInCsp = true; //rsaReceive.Clear();
在上面的代码中,我们使用 CspParameters 将密钥保存起来,ToXmlString 和 FromXmlString 将接收方的公钥告诉给发送方。