RSA
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(数字签名)
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
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));