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

.NET MD5 加密實戰:標準實現與鹽值增強完整指南

     編輯:關於.NET

標準 MD5 實現

public string GetMD5(string input, string salt = "")
{
    using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
    {
        byte[] data = Encoding.UTF8.GetBytes(salt + input);
        byte[] hash = md5.ComputeHash(data);
        
        StringBuilder sb = new StringBuilder();
        foreach (byte b in hash)
            sb.Append(b.ToString("x2")); // 雙位十六進制
        return sb.ToString();
    }
}

// 使用
string hash = GetMD5("123456"); 
// 結果: e10adc3949ba59abbe56e057f20f883e

關鍵要點

  • using 區塊:自動釋放 MD5CryptoServiceProvider 非託管資源
  • UTF-8 編碼:統一字節表示,避免跨平台不一致
  • x2 格式:確保每字節輸出兩位十六進制(如 0F 而非 F)
  • 鹽值機制:salt + input 防彩虹表攻擊,鹽值應隨機生成並存儲

安全性警示

MD5 已不適合安全敏感場景(密碼存儲、簽名驗證):

  • 碰撞攻擊可行(2004 年王小雲團隊破解)
  • 無鹽值極易被彩虹表逆推
  • 計算速度極快,利於暴力破解

替代方案:

  • 密碼存儲:PBKDF2、bcrypt、scrypt、Argon2(慢哈希 + 自帶鹽值)
  • 完整性驗證:SHA-256、SHA-3、HMAC-SHA256
  • 數字簽名:RSA、ECDSA、Ed25519

適用場景(非安全敏感)

  • 文件完整性校驗(非防篡改)
  • 緩存鍵生成
  • 非敏感數據指紋
  • 教學/測試/兼容舊系統

總結

本文提供標準、可生產使用的 MD5 實現代碼,並嚴正說明其安全局限性。現代 .NET 開發中,密碼存儲請務必使用 PBKDF2/Argon2 等慢哈希算法,MD5 僅限非安全敏感場景。

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