本博文列出了.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));