using SM.Core; using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace AR.Core { ///Des加密 public class DesEncryptHelper { private const string Key = "W1#x!3Cm"; /// /// DES+Base64加密 /// 采用ECB、PKCS7 /// /// 加密字符串 /// 秘钥 public static string Encrypt(string encryptString, string key = null) { return Encrypt(encryptString, key, false, true); } /// /// DES+Base64解密 /// 采用ECB、PKCS7 /// /// 解密字符串 /// 秘钥 public static string Decrypt(string decryptString, string key = null) { return Decrypt(decryptString, key, false); } /// /// DES+16进制加密 /// 采用ECB、PKCS7 /// /// 加密字符串 /// 秘钥 /// 是否小写 public static string Encrypt4Hex(string encryptString, string key = null, bool lowerCase = false) { return Encrypt(encryptString, key, true, lowerCase); } /// /// DES+16进制解密 /// 采用ECB、PKCS7 /// /// 解密字符串 /// 秘钥 public static string Decrypt4Hex(string decryptString, string key = null) { return Decrypt(decryptString, key, true); } /// DES加密 private static string Encrypt(string encryptString, string key, bool hex, bool lowerCase = false) { if (string.IsNullOrEmpty(encryptString)) return null; if (string.IsNullOrEmpty(key)) key = Key; if (key.Length < 8) throw new ArgumentException("秘钥长度为8位", nameof(key)); var keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8)); var inputByteArray = Encoding.UTF8.GetBytes(encryptString); DES des = DES.Create(); des.Mode = CipherMode.ECB; des.Key = keyBytes; des.Padding = PaddingMode.PKCS7; using (var stream = new MemoryStream()) { var cStream = new CryptoStream(stream, des.CreateEncryptor(), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); var bytes = stream.ToArray(); return hex ? bytes.ToHex(lowerCase) : bytes.ToBase64(); } } /// DES解密 private static string Decrypt(string decryptString, string key, bool hex) { if (string.IsNullOrEmpty(decryptString)) return null; if (string.IsNullOrEmpty(key)) key = Key; if (key.Length < 8) throw new ArgumentException("秘钥长度为8位", nameof(key)); var keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8)); var inputByteArray = hex ? decryptString.HexToBytes() : Convert.FromBase64String(decryptString); DES des = DES.Create(); des.Mode = CipherMode.ECB; des.Key = keyBytes; des.Padding = PaddingMode.PKCS7; using (var mStream = new MemoryStream()) { var cStream = new CryptoStream(mStream, des.CreateDecryptor(), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Encoding.UTF8.GetString(mStream.ToArray()); } } } }