.NET下的加密解密大全(3):非对称加密

本博文列出了.NET下常用的非对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助。

RSA

  1. /* 作者:GhostBear  
  2.    博客地址:Http://blog.csdn.net/ghostbear  
  3. */  
  4. static string EnRSA(string data,string publickey)  
  5. {  
  6.     RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();   
  7.     byte[] cipherbytes;   
  8.     rsa.FromXmlString(publickey);   
  9.     cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(data), false);   
  10.     return Convert.ToBase64String(cipherbytes);  
  11.       
  12. }  
  13.   
  14. static string DeRSA(string data,string privatekey)  
  15. {  
  16.      
  17.     RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();   
  18.     byte[] cipherbytes; rsa.FromXmlString(privatekey);   
  19.     cipherbytes = rsa.Decrypt(Convert.FromBase64String(data), false);   
  20.     return Encoding.UTF8.GetString(cipherbytes);  
  21. }  


调用代码

  1.   Console.WriteLine("RSA非对称加密");  
  2. Byte[] iv = CreateKey(16);  
  3. Byte[] key = CreateKey(27);  
  4. string inputRSA_1 = inputString();  
  5. RSA rsa = RSA.Create();  
  6.   
  7. string enData = EnRSA(inputRSA_1,rsa.ToXmlString(false));  
  8.   
  9.   
  10. Console.WriteLine("加密后的数据:{0}", enData);  
  11. Console.WriteLine("解密后的数据:{0}", DeRSA(enData,rsa.ToXmlString(true)));  


 

DSA(数字签名)

  1.  /* 作者:GhostBear  
  2.    博客地址:Http://blog.csdn.net/ghostbear  
  3. */  
  4.  static string EnDSA(string data,string publickey)  
  5.    {  
  6.        DSA dsa = DSA.Create();  
  7.        Byte[] result;  
  8.        dsa.FromXmlString(publickey);  
  9.        SHA1 sha1 = SHA1.Create();  
  10.        result = dsa.CreateSignature(sha1.ComputeHash(Convert.FromBase64String(data)));  
  11.        return Convert.ToBase64String(result);  
  12.   
  13.          
  14.    }  
  15.   
  16.    static bool DeDSA(string data,string privatekey,string originalData)  
  17.    {  
  18.        //Byte[] result;   
  19.        DSA dsa = DSA.Create();  
  20.        dsa.FromXmlString(privatekey);  
  21.        SHA1 sha1 = SHA1.Create();  
  22.        return dsa.VerifySignature(sha1.ComputeHash(Convert.FromBase64String(originalData)),Convert.FromBase64String(data));  
  23.   
  24.    }  

调用代码

  1.   Console.WriteLine("DSA数字签名");  
  2. string inputDSA_1 = inputString();  
  3. string inputDSA_2 = inputDSA_1;  
  4. DSA dsa = DSA.Create();  
  5. string enData = EnDSA(inputDSA_1, dsa.ToXmlString(true));  
  6.   
  7. Console.WriteLine("加密后的数据:{0}", enData);  
  8. Console.WriteLine("解密后的数据:{0}", DeDSA(enData, dsa.ToXmlString(false), inputDSA_2));  


 

 

ECDsa

  1. /* 作者:GhostBear  
  2.    博客地址:Http://blog.csdn.net/ghostbear  
  3. */  
  4. static string EnECDsa(string data, CngKey key)  
  5.  {  
  6.      ECDsaCng ecdsa = new ECDsaCng(key);  
  7.        
  8.        
  9.      SHA1 sha1 = SHA1.Create();  
  10.      byte[] result;  
  11.   
  12.      result = ecdsa.SignHash(sha1.ComputeHash(Convert.FromBase64String(data)));  
  13.   
  14.      return Convert.ToBase64String(result);  
  15.   
  16.  }  
  17.   
  18.  static bool DeECDsa(string data, CngKey key,string originalData)  
  19.  {  
  20.      ECDsaCng ecdsa = new ECDsaCng(key);  
  21.      SHA1 sha1 = SHA1.Create();  
  22.   
  23.      return ecdsa.VerifyHash(sha1.ComputeHash(Convert.FromBase64String(originalData)), Convert.FromBase64String(data));  
  24.  }  


调用代码

  1.   Console.WriteLine("ECDsa数字签名");  
  2. string inputDSA_1 = inputString();  
  3. string inputDSA_2 = inputDSA_1;  
  4. CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256);  
  5.   
  6. string enData = EnECDsa(inputDSA_1, key);  
  7.   
  8. Console.WriteLine("加密后的数据:{0}", enData);  
  9. Console.WriteLine("解密后的数据:{0}", DeECDsa(enData, key, inputDSA_2));  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值