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

MD5 演算法 T-SQL 實作(一):常數表、左/右位移、非邏輯運算與核心輪函數

     編輯:關於SqlServer

MD5 T-SQL 實作架構總覽

作者:Rambo Qian | 版本:V1.0.00 | 日期:2003-04-10~16

完整實作包含:常數表、位元操作函數、邏輯運算函數、核心輪函數、訊息轉換、主運算流程。

核心輔助函數

1. MD5_m_OnBits:常數表函數

回傳二進位遮罩值(低 n 位為 1):

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       -- 000...0001
        WHEN 1 THEN 3       -- 000...0011
        WHEN 2 THEN 7       -- 000...0111
        WHEN 3 THEN 15      -- 000...1111
        WHEN 4 THEN 31
        WHEN 5 THEN 63
        WHEN 6 THEN 127
        WHEN 7 THEN 255
        WHEN 8 THEN 511
        WHEN 9 THEN 1023
        WHEN 10 THEN 2047
        WHEN 11 THEN 4095
        WHEN 12 THEN 8191
        WHEN 13 THEN 16383
        WHEN 14 THEN 32767
        WHEN 15 THEN 65535
        WHEN 16 THEN 131071
        WHEN 17 THEN 262143
        -- 續增至 31: 0x7FFFFFFF
    END
    RETURN @iRes
END

2. 位元操作函數

  • MD5_LShift(@val, @bits):左位移(乘 2^bits)
  • MD5_RShift(@val, @bits):右位移(除 2^bits,無號)
  • MD5_AddUnsigned(@a, @b):無號 32-bit 加法(模 2^32)

3. MD5 邏輯運算函數

  • MD5_F(x,y,z):(x & y) | (~x & z)
  • MD5_G(x,y,z):(x & z) | (y & ~z)
  • MD5_H(x,y,z):x ^ y ^ z
  • MD5_I(x,y,z):y ^ (x | ~z)

4. 核心輪函數

  • MD5_FF/FF/GG/HH/II:四輪運算各步驟,包含非線性函數、加法、左旋轉、常數加總

實作特色

  • 使用 WITH ENCRYPTION 保護演算法邏輯
  • 模擬 32-bit 無號整數運算(SQL Server 無原生 UINT)
  • 採用表值函數回傳 Word Array
  • 符合 RFC 1321 MD5 標準規範
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved