使用C#进行RSA(非对称)加密/解密

还是来了解一下非对称加密/解密的原理:
  非对称加密算法使用两把完全不同但又是完全匹配的一对钥钥—>公钥和私钥。
在使用非对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。
加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。非对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用非对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于非对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的非对称加密算法有RSA算法和美国国家标准局提出的DSA。以非对称加密算法为基础的加密技术应用非常广泛。

 

第一步:根据上面的原理性介绍,我们需要生成公钥(发信方需要)和私钥(收信方需要),实现代码如下:

//公钥在a.txt文件中,私钥在b.txt文件中.制造公钥和私钥的方法如下:
RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
string  publickey = crypt.ToXmlString(false);//公钥
string  privatekey = crypt.ToXmlString(true);//私钥
crypt.Clear();
//写入文本文件中
StreamWriter one = new StreamWriter(Server.MapPath("a.txt"),true,UTF8Encoding.UTF8);
one.Write(publickey);
StreamWriter two = new StreamWriter(Server.MapPath("b.txt"),true,UTF8Encoding.UTF8);
two.Write(privatekey);
one.Flush();
two.Flush();
one.Close();
two.Close();
Func.ShowPageMsg("成功保存公钥和密钥!");

 

第二步:发信方使用公钥对明文进行加密,实现代码如下:

StreamReader sr = new StreamReader(Server.MapPath("a.txt"), UTF8Encoding.UTF8);
string readpublickey = sr.ReadToEnd(); //包含 RSA 密钥信息的 XML 字符串。
sr.Close();
UTF8Encoding enc = new UTF8Encoding();
byte[] bytes = enc.GetBytes(TextBox1.Text.Trim());
RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
crypt.FromXmlString(readpublickey);
bytes = crypt.Encrypt(bytes, false);
string encryttext = Convert.ToBase64String(bytes);
string abb = Server.UrlEncode(encryttext);
Response.Write("密文为:" + abb);

 

第三步:收信方使用私钥对密文进行解密,实现代码如下:

StreamReader sr = new StreamReader(Server.MapPath("b.txt"), UTF8Encoding.UTF8);
string readprivatekey = sr.ReadToEnd();
sr.Close();
RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();
UTF8Encoding enc = new UTF8Encoding();
byte[] bytes = Convert.FromBase64String(@Server.UrlDecode(TextBox1.Text.Trim()));
crypt.FromXmlString(readprivatekey);
byte[] decryptbyte = crypt.Decrypt(bytes, false);
string decrypttext = enc.GetString(decryptbyte);
Response.Write("明文为:" + decrypttext);

~~~~~~~~~~~~哦了【原】使用C#进行RSA(非对称)加密/解密

posted @ 2015-11-23 16:43  applekingghfhfhbr  阅读(662)  评论(0编辑  收藏  举报