接續第一部分,本文提供將字串轉為 32-bit 字陣列、字轉十六進位、以及主 MD5 雜湊函數的完整 T-SQL 實作碼(適用 SQL 2000)。
VARCHAR(8000),回傳資料表變數 @tWordArray (ID INT IDENTITY(0,1), Word INT)。MD5_LShift 處理位移組合。INT,回傳 CHAR(8)(8 位十六進位)。NVARCHAR(4000),回傳 CHAR(32)(32 位小寫十六進位)。MD5_FF/GG/HH/II,內含 MD5_AddUnsigned、MD5_RotateLeft。MD5_WordToHex 轉為 32 字元字串。腳本內含標準測試向量:空字串、'a'、'abc'、'message digest' 等,均與 RFC 1321 標準值一致,另含中文「我」驗證 Unicode 處理正確。
-- 測試範例
SELECT dbo.MD5('') -- 應為 d41d8cd98f00b204e9800998ecf8427e
SELECT dbo.MD5('abc') -- 應為 900150983cd24fb0d6963f7d28e17f72