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
关键点说明:
-
DES加密/解密

- 使用
DESCryptoServiceProvider实现 - 支持自定义密钥和IV(必须为8字节)
- 默认使用Base64编码输出
- 采用UTF-8编码处理文本
- 使用
-
MD5加密
- 生成32位大写十六进制哈希值
- 不可逆加密(常用于密码存储)
- 使用
MD5.Create()创建实例
-
注意事项:

- 密钥安全:实际项目中不要使用硬编码密钥,应从安全配置读取
- 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时需注意平台兼容性。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/289206.html

