DES加密解密
来源:互联网 发布:首富隆起知乎 编辑:程序博客网 时间:2024/06/16 08:03
/// <summary> /// 加密类 /// <para>Date:2012-04-23 PM.</para> /// </summary> public class Encrypt { /// <summary> /// 默认密钥向量. /// </summary> private static readonly byte[] Keys = { 0xAB, 0xCD, 0xEF, 0x68, 0xDB, 0xFA, 0x01, 0xE2 }; private Encrypt() { } /// <summary> /// 创建加密类对象. /// </summary> public static Encrypt CreateCryptoServiceProvider() { return new Encrypt(); } /// <summary> /// DES加密. /// </summary> /// <param name="_EncryptStr">待加密字符串.</param> /// <param name="_EncryptKey">加密密钥. 8位</param> /// <returns></returns> public String DESEncrypt(String _EncryptStr,String _EncryptKey) { try { byte[] RogerKey = Encoding.Default.GetBytes(_EncryptKey.Substring(0, 8)); byte[] RogerIV = Keys; byte[] RogerString = Encoding.Default.GetBytes(_EncryptStr); DES RogerDES = new DESCryptoServiceProvider(); MemoryStream RogerMs = new MemoryStream(); CryptoStream RogerCs = new CryptoStream(RogerMs, RogerDES.CreateEncryptor(RogerKey, RogerIV), CryptoStreamMode.Write); RogerCs.Write(RogerString, 0, RogerString.Length); RogerCs.FlushFinalBlock(); String result = BitConverter.ToString(RogerMs.ToArray()).Replace("-", string.Empty); return result; } catch (Exception) { return _EncryptStr; } } /// <summary> /// DES解密. /// </summary> /// <param name="_DecryptStr">等解密的字符串.</param> /// <param name="_DecryptKey">解密密钥. 8位</param> /// <returns></returns> public String DESDecrypt(String _DecryptStr, String _DecryptKey) { try { byte[] RogerKey = Encoding.Default.GetBytes(_DecryptKey.Substring(0, 8)); byte[] RogerIV = Keys; int blocks = _DecryptStr.Length / 2; byte[] EncryptByteData = new byte[blocks]; String tempItem = null; for (int i = 0; i < blocks; i++) { tempItem = _DecryptStr.Substring(i * 2, 2); EncryptByteData[i] = byte.Parse(tempItem, System.Globalization.NumberStyles.HexNumber); } DES RogerDES = new DESCryptoServiceProvider(); MemoryStream RogerMs = new MemoryStream(); CryptoStream RogerCs = new CryptoStream(RogerMs, RogerDES.CreateDecryptor(RogerKey, RogerIV), CryptoStreamMode.Write); RogerCs.Write(EncryptByteData, 0, EncryptByteData.Length); RogerCs.FlushFinalBlock(); String result = Encoding.Default.GetString(RogerMs.ToArray()); return result; } catch (Exception) { return _DecryptStr; } } }