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

MD5 演算法 T-SQL 實作(二):核心轉換與雜湊函數

     編輯:關於SqlServer

接續第一部分,本文提供將字串轉為 32-bit 字陣列、字轉十六進位、以及主 MD5 雜湊函數的完整 T-SQL 實作碼(適用 SQL 2000)。

1. 字串轉字陣列:MD5_ConvertToWordArray

  • 輸入 VARCHAR(8000),回傳資料表變數 @tWordArray (ID INT IDENTITY(0,1), Word INT)。
  • 依 RFC 1321:補位(加 0x80)、附加原始長度(bits),每 512 bits 分組為 16 個 32-bit 字。
  • 使用 MD5_LShift 處理位移組合。

2. 字轉十六進位:MD5_WordToHex

  • 輸入 INT,回傳 CHAR(8)(8 位十六進位)。
  • 迴圈 4 次,每次取 8 bits,查表轉十六進位字元。

3. 主雜湊函數:MD5

  • 輸入 NVARCHAR(4000),回傳 CHAR(32)(32 位小寫十六進位)。
  • 初始化四個 32-bit 暫存器 A,B,C,D(標準魔數)。
  • 四輪各 16 步運算(F、G、H、I 函數),使用常數 S11~S44 與 T 值。
  • 每步呼叫 MD5_FF/GG/HH/II,內含 MD5_AddUnsigned、MD5_RotateLeft。
  • 最後合併 A,B,C,D 經 MD5_WordToHex 轉為 32 字元字串。

測試驗證

腳本內含標準測試向量:空字串、'a'、'abc'、'message digest' 等,均與 RFC 1321 標準值一致,另含中文「我」驗證 Unicode 處理正確。

-- 測試範例
SELECT dbo.MD5('') -- 應為 d41d8cd98f00b204e9800998ecf8427e
SELECT dbo.MD5('abc') -- 應為 900150983cd24fb0d6963f7d28e17f72
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved