当前位置:首页 > 技术教程 > 正文

ASP.NET如何实现DES和MD5加密帮助类 | NET加密解密代码

using System; using System.IO; using System.Security.Cryptography; using System.Text; public static class EncryptHelper { // 默认DES密钥和IV(8字节长度) private static readonly string DefaultDESKey = "ABCDEFGH"; // 8字符 private static readonly string DefaultDESIV = "12345678"; // 8字符 /// <summary> /// DES加密(使用默认密钥) /// </summary> public static string DESEncrypt(string plainText) { return DESEncrypt(plainText, DefaultDESKey, DefaultDESIV); } /// <summary> /// DES加密(自定义密钥和IV) /// </summary> public static string DESEncrypt(string plainText, string key, string iv) { if (string.IsNullOrEmpty(plainText)) return null; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { byte[] inputBytes = Encoding.UTF8.GetBytes(plainText); des.Key = Encoding.ASCII.GetBytes(key); des.IV = Encoding.ASCII.GetBytes(iv); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(inputBytes, 0, inputBytes.Length); cs.FlushFinalBlock(); } return Convert.ToBase64String(ms.ToArray()); } } } /// <summary> /// DES解密(使用默认密钥) /// </summary> public static string DESDecrypt(string cipherText) { return DESDecrypt(cipherText, DefaultDESKey, DefaultDESIV); } /// <summary> /// DES解密(自定义密钥和IV) /// </summary> public static string DESDecrypt(string cipherText, string key, string iv) { if (string.IsNullOrEmpty(cipherText)) return null; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { byte[] inputBytes = Convert.FromBase64String(cipherText); des.Key = Encoding.ASCII.GetBytes(key); des.IV = Encoding.ASCII.GetBytes(iv); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(inputBytes, 0, inputBytes.Length); cs.FlushFinalBlock(); } return Encoding.UTF8.GetString(ms.ToArray()); } } } /// <summary> /// MD5加密(32位大写) /// </summary> public static string MD5Encrypt(string input) { if (string.IsNullOrEmpty(input)) return null; using (MD5 md5 = MD5.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("X2")); // 转换为大写十六进制 } return sb.ToString(); } } }

使用示例:

// DES加密解密 string original = "Hello, World!"; string encrypted = EncryptHelper.DESEncrypt(original); string decrypted = EncryptHelper.DESDecrypt(encrypted); Console.WriteLine($"原始: {original}"); Console.WriteLine($"加密: {encrypted}"); Console.WriteLine($"解密: {decrypted}"); // MD5加密 string input = "password123"; string md5Hash = EncryptHelper.MD5Encrypt(input); Console.WriteLine($"MD5哈希: {md5Hash}"); // 输出32位大写MD5

关键点说明:

  1. DES加密/解密

    ASP.NET如何实现DES和MD5加密帮助类 | NET加密解密代码 第1张

    • 使用DESCryptoServiceProvider实现
    • 支持自定义密钥和IV(必须为8字节)
    • 默认使用Base64编码输出
    • 采用UTF-8编码处理文本
  2. MD5加密

    • 生成32位大写十六进制哈希值
    • 不可逆加密(常用于密码存储)
    • 使用MD5.Create()创建实例
  3. 注意事项

    ASP.NET如何实现DES和MD5加密帮助类 | NET加密解密代码 第2张

    • 密钥安全:实际项目中不要使用硬编码密钥,应从安全配置读取
    • DES安全性:DES已被认为不够安全,建议生产环境使用AES
    • IV使用:每次加密应使用不同IV增强安全性(示例为演示固定IV)
    • MD5局限:MD5存在碰撞漏洞,重要场景建议使用SHA256

增强建议:

// 随机生成IV的增强版DES加密 public static (string Result, string IV) DESEncryptWithRandomIV(string plainText, string key) { using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.GenerateIV(); // 自动生成随机IV byte[] iv = des.IV; // ...加密逻辑... return (cipherText, Convert.ToBase64String(iv)); } }

提示:在.NET Core中建议使用Aes代替DES,使用System.Security.Cryptography.MD5时需注意平台兼容性。

ASP.NET如何实现DES和MD5加密帮助类 | NET加密解密代码 第3张

0