首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

T-SQL實現MD5演算法(相容SQL Server 2000)

     編輯:關於SqlServer

本文提供完整的T-SQL純量函數實現MD5雜湊演算法,包含三個核心函數:MD5_ConvertToWordArray、MD5_WordToHex、MD5,以及輔助函數MD5_LShift、MD5_RShift、MD5_AddUnsigned、MD5_FF/GG/HH/II四輪非線性函數。程式碼經測試向量驗證,輸出符合RFC 1321標準。

核心函數架構

  1. MD5_ConvertToWordArray:將輸入字串按MD5填充規則(Append 0x80、長度佔64位)轉為16字整數陣列表變數@twordArray。
  2. MD5_WordToHex:將32位無號整數轉為8位十六進位字串(大寫)。
  3. MD5:主函數,初始化四個32位暫存器(A=0x67452301, B=0xEFCDAB89, C=0x98BADCFE, D=0x10325476),按512位分組進行四輪各16步運算,最後輸出32位小寫十六進位雜湊值。

關鍵實現細節

  • 使用UNICODE(SUBSTRING(...))逐字元處理,支援雙位元組字符(如中文)。
  • 位運算透過自訂LShift/RShift模擬無號位移。
  • 模組加法MD5_AddUnsigned防止溢位截斷。
  • 四輪常數(S11~S44)與魔數(0xD76AA478等)嚴格對應RFC 1321。

驗證測試向量

MD5('')               = d41d8cd98f00b204e9800998ecf8427e
MD5('a')              = 0cc175b9c0f1b6a831c399e269772661
MD5('abc')            = 900150983cd24fb0d6963f7d28e17f72
MD5('message digest') = f96b697d7cb7938d525a2f31aaf161d0
MD5('我')             = a31d0f25367ebe046897f8a939ca4a9f

適用場景與限制

適用於SQL Server 2000/2005/2008無CLR環境下的資料完整性校驗、密碼雜湊(建議加鹽)、ETL檢核碼產生。效能較CLR實現慢,大量資料建議改用HASHBYTES('MD5', ...)(SQL 2005+內建)。

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