Des加密:对称可逆加密(公钥加密算法);
1.对称加密:含有一个加/解密钥(同一个密钥),在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密;
2.非对称加密:加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进;
代码如下:using System; using System.IO; using System.Security.Cryptography; namespace Common.Helper.Crypto { /// <summary> /// Des加密解密-对称可逆加密 /// DES,全称Data Encryption Standard,是一种对称加密算法。 /// 应用:文件传输,数据传输,加密速度快,秘钥是安全问题 /// </summary> public static class DesCrypto { /// <summary> /// 检验密钥和向量是否有效长度【8】 /// </summary> /// <param name="key">密钥</param> /// <returns>bool</returns> private static bool CheckKeyOrIv(string key,string iv) { if (string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(iv)) return false; if (8.Equals(key.Length) && iv.Length.Equals(key.Length)) return true; else return false; } /// <summary> /// 加密 /// </summary> /// <param name="palinData">明文</param> /// <param name="key">密钥:8位长度</param> /// <param name="iv">向量:8位长度</param> /// <param name="encodingType">编码方式</param> /// <returns>密文</returns> public static string Encrypt(string palinData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8) { if (string.IsNullOrWhiteSpace(palinData)) return null; if (!CheckKeyOrIv(key,iv)) return palinData; using (DESCryptoServiceProvider sp = new DESCryptoServiceProvider { Key = EncodingStrOrByte.GetBytes(key, encodingType), IV = EncodingStrOrByte.GetBytes(iv, encodingType) }) { using (ICryptoTransform ct = sp.CreateEncryptor()) { byte[] bytes = EncodingStrOrByte.GetBytes(palinData, encodingType); using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, ct,CryptoStreamMode.Write)) { cs.Write(bytes, 0, bytes.Length); cs.FlushFinalBlock(); } return Convert.ToBase64String(ms.ToArray()); } } } } /// <summary> /// 解密 /// </summary> /// <param name="encryptedData">密文</param> /// <param name="key">密钥:8位长度</param> /// <param name="iv">向量:8位长度</param> /// <param name="encodingType">编码方式</param> /// <returns>明文</returns> public static string Decrypt(string encryptedData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8) { if (string.IsNullOrWhiteSpace(encryptedData)) return null; if (!CheckKeyOrIv(key, iv)) return encryptedData; using (DESCryptoServiceProvider sp = new DESCryptoServiceProvider { Key = EncodingStrOrByte.GetBytes(key, encodingType), IV = EncodingStrOrByte.GetBytes(iv, encodingType) }) { using (ICryptoTransform ct = sp.CreateDecryptor()) { byte[] bytes = Convert.FromBase64String(encryptedData); using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write)) { cs.Write(bytes, 0, bytes.Length); cs.FlushFinalBlock(); } return EncodingStrOrByte.GetString(ms.ToArray(), encodingType); } } } } } }
编码处理类:同上Rsa加密解密;注:加/解密密钥和向量均为8位长度。