DES-非机密数据加密标准,可用于兼容旧系统,新系统不建议使用
3DES-DES的加强版,DES到AES之间的过渡算法
AES-高级加密标准,替代DES
RSA-非对称加密解密算法,多用于签名验证,加密解决速度慢,不建议用于大量数据的加密解密
目前跨系统间的加密数据通讯,一般是RSA与AES两种加密算法结合使用,RSA用于对AES密钥进行加密解密,AES用于对交易数据进行加密解密
算法代码:
public class EncryptHelper { //DES算法8位加密key,一般存在数据库或文件中 private static string defaultDesKey = "j5ca9aEn"; //DES算法8位加密向量,一般存在数据库或文件中 private static string defaultDesIv = "GTRSQ96C"; //3DES算法12位加密向量,一般存在数据库或文件中 private static string defaultTripleDesIV = "68Hfwj3kfX=T"; //3DES算法32位加密key,一般存在数据库或文件中 private static string defaultTripleDesKey = "QdpQGoa+8SA9dxhVs6DSXLfUGqw+Ahtd"; /// <summary> /// Aes加解密钥必须32位,一般存在数据库或文件中 /// </summary> private static string defaultAesKey = "ZdpQGoa+0SA1dxhVs7DSXLfUGqw-Ahtg"; #region DES加密解密-非机密数据的正式数据加密标准(DES Data Encryption Standard) //默认密钥向量 //private static readonly byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; #region DES加密 /// <summary> /// 加密数据 /// </summary> /// <param name="input">需要加密的字符串</param> /// <param name="sKey">加密秘钥,不传则默认为指定的值</param> /// <param name="sIv">加密向量,不传则默认为指定的值</param> /// <returns></returns> public static string DESEncrypt(string input, string sKey = "", string sIv = "") { if (string.IsNullOrEmpty(input)) return String.Empty; if (string.IsNullOrEmpty(sKey)) sKey = defaultDesKey; else if (sKey.Length > 8) sKey = sKey.Substring(0, 8); if (string.IsNullOrEmpty(sIv)) sIv = defaultDesIv; else if (sIv.Length > 8) sIv = sIv.Substring(0, 8); var des = new DESCryptoServiceProvider(); MemoryStream ms = null; CryptoStream encStream = null; StreamWriter sw = null; string result; try { var key = Encoding.UTF8.GetBytes(sKey); var iv = Encoding.UTF8.GetBytes(sIv); ms = new MemoryStream(); encStream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write); sw = new StreamWriter(encStream); sw.Write(input); sw.Flush(); encStream.FlushFinalBlock(); ms.Flush(); result = Convert.ToBase64String(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length, System.Globalization.CultureInfo.InvariantCulture)); } finally { if (sw != null) sw.Close(); if (encStream != null) encStream.Close(); if (ms != null) ms.Close(); } return result; } #endregion #region DES解密 /// <summary> /// 解密数据 /// </summary> /// <param name="input">需要解密的字符串</param> /// <param name="sKey">加密秘钥,不传则默认为指定的值</param> /// <param name="sIv">加密向量,不传则默认为指定的值</param> /// <returns></returns> public static string DESDecrypt(string input, string sKey = "", string sIv = "") { byte[] buffer; try { buffer = Convert.FromBase64String(input); } catch (System.ArgumentNullException) { return String.Empty; } catch (System.FormatException) { return String.Empty; } var des = new DESCryptoServiceProvider(); MemoryStream ms = null; CryptoStream encStream = null; StreamReader sr = null; var result = String.Empty; if (string.IsNullOrEmpty(sKey)) sKey = defaultDesKey; else if (sKey.Length > 8) sKey = sKey.Substring(0, 8); if (string.IsNullOrEmpty(sIv)) sIv = defaultDesIv; else if (sIv.Length > 8) sIv = sIv.Substring(0, 8); try { ms = new MemoryStream(buffer); var key = Encoding.UTF8.GetBytes(sKey); var iv = Encoding.UTF8.GetBytes(sIv); encStream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read); sr = new StreamReader(encStream); result = sr.ReadToEnd(); } finally { if (sr != null) sr.Close(); if (encStream != null) encStream.Close(); if (ms != null) ms.Close(); } return result; } #endregion #endregion #region 3DES加密解密-DES增强版 /// <summary> /// 加密数据-3DES /// </summary> /// <param name="input">需要加密的字符串</param> /// <param name="sKey">加密秘钥,不传则默认为指定的值</param> /// <param name="sIv">加密向量,不传则默认为指定的值</param> /// <returns></returns> public static string TripleDESEncrypt(string input, string sKey = "", string sIv = "") { if (string.IsNullOrEmpty(input)) return String.Empty; if (string.IsNullOrEmpty(sKey)) sKey = defaultTripleDesKey; else if (sKey.Length > 32) sKey = sKey.Substring(0, 32); if (string.IsNullOrEmpty(sIv)) sIv = defaultTripleDesIV; else if (sIv.Length > 12) sIv = sIv.Substring(0, 12); //创建一个内存流,用于存放密文 &