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

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

RSA

        /* 作者:GhostBear 
           博客地址:Http://blog.csdn.net/ghostbear 
        */
        static string EnRSA(string data,string publickey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
            byte[] cipherbytes; 
            rsa.FromXmlString(publickey); 
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(data), false); 
            return Convert.ToBase64String(cipherbytes);
            
        }

        static string DeRSA(string data,string privatekey)
        {
           
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
            byte[] cipherbytes; rsa.FromXmlString(privatekey); 
            cipherbytes = rsa.Decrypt(Convert.FromBase64String(data), false); 
            return Encoding.UTF8.GetString(cipherbytes);
        }


调用代码

              Console.WriteLine("RSA非对称加密");
            Byte[] iv = CreateKey(16);
            Byte[] key = CreateKey(27);
            string inputRSA_1 = inputString();
            RSA rsa = RSA.Create();

            string enData = EnRSA(inputRSA_1,rsa.ToXmlString(false));


            Console.WriteLine("加密后的数据:{0}", enData);
            Console.WriteLine("解密后的数据:{0}", DeRSA(enData,rsa.ToXmlString(true)));


 

DSA(数字签名)

      /* 作者:GhostBear 
        博客地址:Http://blog.csdn.net/ghostbear 
     */
      static string EnDSA(string data,string publickey)
        {
            DSA dsa = DSA.Create();
            Byte[] result;
            dsa.FromXmlString(publickey);
            SHA1 sha1 = SHA1.Create();
            result = dsa.CreateSignature(sha1.ComputeHash(Convert.FromBase64String(data)));
            return Convert.ToBase64String(result);

            
        }

        static bool DeDSA(string data,string privatekey,string originalData)
        {
            //Byte[] result;
            DSA dsa = DSA.Create();
            dsa.FromXmlString(privatekey);
            SHA1 sha1 = SHA1.Create();
            return dsa.VerifySignature(sha1.ComputeHash(Convert.FromBase64String(originalData)),Convert.FromBase64String(data));

        }

调用代码

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


 

 

ECDsa

       /* 作者:GhostBear 
          博客地址:Http://blog.csdn.net/ghostbear 
       */
       static string EnECDsa(string data, CngKey key)
        {
            ECDsaCng ecdsa = new ECDsaCng(key);
            
            
            SHA1 sha1 = SHA1.Create();
            byte[] result;

            result = ecdsa.SignHash(sha1.ComputeHash(Convert.FromBase64String(data)));

            return Convert.ToBase64String(result);

        }

        static bool DeECDsa(string data, CngKey key,string originalData)
        {
            ECDsaCng ecdsa = new ECDsaCng(key);
            SHA1 sha1 = SHA1.Create();

            return ecdsa.VerifyHash(sha1.ComputeHash(Convert.FromBase64String(originalData)), Convert.FromBase64String(data));
        }


调用代码

              Console.WriteLine("ECDsa数字签名");
            string inputDSA_1 = inputString();
            string inputDSA_2 = inputDSA_1;
            CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256);

            string enData = EnECDsa(inputDSA_1, key);

            Console.WriteLine("加密后的数据:{0}", enData);
            Console.WriteLine("解密后的数据:{0}", DeECDsa(enData, key, inputDSA_2));


 

 

 

 

 相关文章

.NET下的加密解密大全(1):哈希加密




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




 .NET下的加密解密大全(4):玩转Hash加密

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值