MD5加密
* message-digest algorithm 5
* 单向加密,无法根据密文解密
* 对输入的任意长度字符串,都产生一个128位的整体
* using System.Security.Cryptography;
/// <summary> /// 通过MD5算法,对指定字符串加密 /// </summary> /// <param name="sPalin">指定明文</param> /// <returns>返回密文</returns> public string EncryptByMD5(string sPalin) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] palinData = Encoding.UTF8.GetBytes(sPalin); // 可以自定义 字符编码 byte[] encryptData = md5.ComputeHash(palinData); // 将输入字符串 加密 string vStr = Convert.ToBase64String(encryptData); // 将加密后的字节数组转换位加密字符串 return vStr; // 返回密文 }
RSA加密、解密
* 非对称加密,加密和解密使用不同的密钥
* 目前最具影响力的公钥加密算法
* 生产密钥很麻烦,分组长度太大
* using System.Security.Cryptography;
/// <summary> /// 通过RSA算法,对指定字符串加密 /// </summary> /// <param name="sPalin">指定明文</param> /// <returns>返回密文</returns> public string EncryptByRSA(string sPalin) { CspParameters vParam = new CspParameters(); vParam.KeyContainerName = "ch_dx_cuit"; // 密钥容器名称,与解密保持一致 using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(vParam)) { byte[] palinData = Encoding.UTF8.GetBytes(sPalin); byte[] encryptData = rsa.Encrypt(palinData, false); // 加密 string vStr = Convert.ToBase64String(encryptData); // 将加密后的字节数组转换位加密字符串 return vStr; // 返回密文 } } /// <summary> /// 通过RSA算法,对指定密文解密 /// </summary> /// <param name="sEncrypt">指定密文</param> /// <returns>返回明文</returns> public string DecryptByRSA(string sEncrypt) { CspParameters vParam = new CspParameters(); vParam.KeyContainerName = "ch_dx_cuit"; // 密钥容器名称,与加密保持一致 using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(vParam)) { byte[] encryptData = Convert.FromBase64String(sEncrypt); byte[] decryptData = rsa.Decrypt(encryptData, false); string vStr = Encoding.UTF8.GetString(decryptData); return vStr; // 返回明文 } }
DES加密、解密
* 对称加密算法,加密解密使用同一密钥,不安全
* 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小
* 使用 16 个循环,使用异或,置换,代换,移位操作
/// <summary> /// 通过DES算法,对指定字符串加密 /// </summary> /// <param name="sPalin">指定明文</param> /// <returns>返回密文</returns> public string EncryptByDES(string sPalin) { string sKey = "chdxcuit"; // 必须的,8位密钥。与解密保持一致 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); byte[] palinData = Encoding.UTF8.GetBytes(sPalin); MemoryStream ms = new MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(palinData, 0, palinData.Length); cs.FlushFinalBlock(); cs.Close(); } string vStr = Convert.ToBase64String(ms.ToArray()); ms.Close(); return vStr; // 返回密文 } } /// <summary> /// 通过DES算法,对指定密文解密 /// </summary> /// <param name="sEncrypt">指定密文</param> /// <returns>返回明文</returns> public string DecryptByDES(string sEncrypt) { string sKey = "chdxcuit"; // 8位密钥,与加密保持一致 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); byte[] encryptData = Convert.FromBase64String(sEncrypt); MemoryStream ms = new MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(encryptData, 0, encryptData.Length); cs.FlushFinalBlock(); cs.Close(); } string vStr = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return vStr; // 返回明文 } }
http://www.cnblogs.com/CUIT-DX037/