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

T-SQL 實現 MD5 哈希算法(上):核心輔助函數 MD5_m_OnBits

     編輯:關於SqlServer

SQL Server 內建 HASHBYTES('MD5', ...) 從 2005 開始提供,但 2000 版本無此函數。本文展示純 T-SQL 實現 MD5 的第一步:位掩碼查找表函數 MD5_m_OnBits。

函數作用

返回低 @i 位全為 1 的整數掩碼(0→1, 1→3, 2→7, ..., 31→0xFFFFFFFF),用於 MD5 輪函數中的位運算。

代碼

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_m_OnBits]') AND xtype IN (N'FN',N'IF',N'TF'))
  DROP FUNCTION [dbo].[MD5_m_OnBits];
GO

CREATE FUNCTION dbo.MD5_m_OnBits (@i TINYINT)
RETURNS INT
WITH ENCRYPTION
AS
BEGIN
  DECLARE @iRes INT;
  SELECT @iRes = CASE @i
    WHEN 0 THEN 1          -- 0x00000001
    WHEN 1 THEN 3          -- 0x00000003
    WHEN 2 THEN 7          -- 0x00000007
    WHEN 3 THEN 15         -- 0x0000000F
    WHEN 4 THEN 31         -- 0x0000001F
    WHEN 5 THEN 63         -- 0x0000003F
    WHEN 6 THEN 127        -- 0x0000007F
    WHEN 7 THEN 255        -- 0x000000FF
    WHEN 8 THEN 511        -- 0x000001FF
    WHEN 9 THEN 1023       -- 0x000003FF
    WHEN 10 THEN 2047      -- 0x000007FF
    WHEN 11 THEN 4095      -- 0x00000FFF
    WHEN 12 THEN 8191      -- 0x00001FFF
    WHEN 13 THEN 16383     -- 0x00003FFF
    WHEN 14 THEN 32767     -- 0x00007FFF
    WHEN 15 THEN 65535     -- 0x0000FFFF
    WHEN 16 THEN 131071    -- 0x0001FFFF
    WHEN 17 THEN 262143    -- 0x0003FFFF
    WHEN 18 THEN 524287    -- 0x0007FFFF
    -- ... 續至 31
    ELSE 0
  END;
  RETURN @iRes;
END;

後續計劃

  1. 常數表:S 盒、K 表、初始鏈值
  2. 核心輪函數:FF、GG、HH、II
  3. 主入口函數:MD5_Hash(@input VARCHAR(MAX)) RETURNS BINARY(16)
  4. 性能優化:內聯表值函數、CLR 集成對比
純 T-SQL 實現 MD5 屬教學/兼容性用途,生產環境 2005+ 請直接用 HASHBYTES 或 CLR。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved