首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

C# 加密工具類:MD5、DES、3DES、RC2、AES 一網打盡

     編輯:更多程式設計知識

數據安全場景下,常需對敏感字符串進行哈希或可逆加密。本文提供一個静态类 Cryptography,封裝 5 種主流算法的加密/解密方法,參數校驗完善、異常處理統一、代碼即拿即用,適合 .NET Framework / .NET Core 項目直接引用。

算法速查表

算法類型密鑰長度要求典型場景
MD5單向哈希無密碼存儲(建議加鹽)、文件完整性校驗
DES對稱加密8 字節大量數據高速加密,安全性一般
3DES對稱加密3×8 字節金融/支付領域,兼容舊系統
RC2對稱加密5-16 字節變長密鑰加密大量數據
AES (Rijndael)對稱加密任意(建議16/24/32字節)現代標準,高性能高安全,首選

核心代碼結構

public static class Cryptography {
    // MD5
    public static string MD5Encrypt(string encryptString) { ... }

    // DES
    public static string DESEncrypt(string encryptString, string encryptKey) { ... }
    public static string DESDecrypt(string decryptString, string decryptKey) { ... }

    // RC2
    public static string RC2Encrypt(string encryptString, string encryptKey) { ... }
    public static string RC2Decrypt(string decryptString, string decryptKey) { ... }

    // 3DES (三次 DES)
    public static string DES3Encrypt(string encryptString, string key1, string key2, string key3) { ... }
    public static string DES3Decrypt(string decryptString, string key1, string key2, string key3) { ... }

    // AES
    public static string AESEncrypt(string encryptString, string encryptKey) { ... }
    public static string AESDecrypt(string decryptString, string decryptKey) { ... }
}

關鍵實現細節

1. 統一的加密流程模板

所有可逆加密均遵循:
Encoding.Default.GetBytes → MemoryStream → CryptoStream(CreateEncryptor/Decryptor) → Write/FlushFinalBlock → Convert.ToBase64String / Encoding.Default.GetString。

2. 固定 IV (初始化向量)

代碼中對 DES/RC2/3DES 使用固定 IV:{0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};AES 使用 Base64 解碼後的固定 IV。生產環境建議改為隨機 IV 並隨密文輸出,防止重放攻擊。

3. 密鑰長度強校驗

每個方法開頭均檢查 string.IsNullOrEmpty 及密鑰長度,不符合直接拋出 Exception,避免運行時加密失敗。

4. 3DES 實現為三重 DES

DES3Encrypt 依次調用 DESEncrypt(key3) → DESEncrypt(key2) → DESEncrypt(key1);解密順序相反。等效於 TripleDESCryptoServiceProvider,但復用了現有 DES 邏輯。

使用示例

// MD5
string pwdHash = Cryptography.MD5Encrypt("userPassword123");

// AES (推薦)
string aesKey = "1234567890123456"; // 16字節
string encrypted = Cryptography.AESEncrypt("敏感數據", aesKey);
string decrypted = Cryptography.AESDecrypt(encrypted, aesKey);

// 3DES
string k1 = "12345678", k2 = "abcdefgh", k3 = "87654321";
string tdesEnc = Cryptography.DES3Encrypt("數據", k1, k2, k3);
string tdesDec = Cryptography.DES3Decrypt(tdesEnc, k1, k2, k3);

安全建議

  • 密碼存儲:請勿直接用 MD5,改用 PBKDF2 / BCrypt / Argon2 等慢哈希並加鹽。
  • 密鑰管理:勿硬編碼密鑰,使用 Azure Key Vault、AWS KMS 或環境變量注入。
  • IV 隨機化:AES/DES 加密時生成隨機 IV,將 IV (Base64) 與密文拼接存儲,解密時分離。
  • 算法選擇:新項目優先 AES-256-GCM (需 .NET Core 3.0+ AesGcm) 或 AES-CBC + HMAC。

本類適合快速原型、遺留系統維護、教學演示;正式上線請按上述建議加固。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved