WEB开发网
开发学院软件开发C语言 非对称加密RSA的应用及在C#中的实现 阅读

非对称加密RSA的应用及在C#中的实现

 2010-09-30 22:47:06 来源:WEB开发网   
核心提示: Step 1:发送方先产生成一对密钥,并将公钥公开给接收方;Step 2:发送方将数据D进行消息摘要,非对称加密RSA的应用及在C#中的实现(3),得到Q;Step 3:用私钥对Q进行加密得到密文MQ,然后将数据D和密文MQ一起发送给接收方;Step 4:接收方得到数据D和密文MQ后,另外希望大

Step 1:发送方先产生成一对密钥,并将公钥公开给接收方;

Step 2:发送方将数据D进行消息摘要,得到Q;

Step 3:用私钥对Q进行加密得到密文MQ,然后将数据D和密文MQ一起发送给接收方;

Step 4:接收方得到数据D和密文MQ后,用公钥将密文MQ解密得到q1;

Step 5:接收方使用相同的算法对数据D进行消息摘要,得到q2;

Step 6:比较q1和q2,相等则证明D是由发送方发送的,且没有被修改过。

好了,非对称加密的使用介绍了一大堆,后面我们来看看如何用C#来实现RSA非对称加密。

.Net中的加密操作所涉及的对象都在命名空间System.Security.Cryptography下,所以请先在你的程序中添加using System.Security.Cryptography; 其中,RSA加密算法由RSACryptoServiceProvider对象实现。下面的代码分别实现了数据的加密解密和签名与验证。

  1: string PublicKey, PrivateKey;
  2: RSACryptoServiceProvider rsaProvider;
  3: void Initial()
  4: { 
  5:   //声明一个RSA算法的实例,由RSACryptoServiceProvider类型的构造函数指定了密钥长度为1024位
  6:   //实例化RSACryptoServiceProvider后,RSACryptoServiceProvider会自动生成密钥信息。
  7:   rsaProvider = new RSACryptoServiceProvider(1024);
  8:   //将RSA算法的公钥导出到字符串PublicKey中,参数为false表示不导出私钥
  9:   PublicKey = rsaProvider.ToXmlString(false);
 10:   //将RSA算法的私钥导出到字符串PrivateKey中,参数为true表示导出私钥
 11:   PrivateKey = rsaProvider.ToXmlString(true);
 12:  
 13:  
 14: byte[] EncryptData(byte[] data)
 15: {
 16:   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
 17:   //将公钥导入到RSA对象中,准备加密;
 18:   rsa.FromXmlString(PublicKey);
 19:   //对数据data进行加密,并返回加密结果;
 20:   //第二个参数用来选择Padding的格式
 21:   return rsa.Encrypt(data, false);
 22: }
 23:  
 24: byte[] DecryptData(byte[] data)
 25: {
 26:   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
 27:   //将私钥导入RSA中,准备解密;
 28:   rsa.FromXmlString(PrivateKey);
 29:   //对数据进行解密,并返回解密结果;
 30:   return rsa.Decrypt(data, false);
 31: }
 32:  
 33: byte[] Sign(byte[] data)
 34: {
 35:   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
 36:   //导入私钥,准备签名
 37:   rsa.FromXmlString(PrivateKey);
 38:   //将数据使用MD5进行消息摘要,然后对摘要进行签名并返回签名数据
 39:   return rsa.SignData(data, "MD5");
 40: }
 41:  
 42: bool Verify(byte[] data, byte[] Signature)
 43: {
 44:   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
 45:   //导入公钥,准备验证签名
 46:   rsa.FromXmlString(PublicKey);
 47:   //返回数据验证结果
 48:   return rsa.VerifyData(data, "MD5", Signature);
 49: }

关于RSA更多的内容,大家可以参照MSDN和网络上的教程自己动手进行练习。我会在后面的文章中继续讲解关于密钥的保存方面的内容,希望大家喜欢。

另外希望大家到网上查查RSA的具体算法,非常有意思,并且非常佩服设计出这些算法的人,真不知道他们的脑袋里装的都是什么~~

上一页  1 2 3 

Tags:对称 加密 RSA

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接