注册
 找回密码
 注册
江西广告网
查看: 211|回复: 0
打印 上一主题 下一主题

MD5算法的T-SQL实现(FOR SQL2000)(一)

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-22 16:54:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  /*****************************************************************************   * Name: T-SQL MD5算法实现   * Author: Rambo Qian   * Create Date: 2003-04-10   * Last Modified by: Rambo Qian   * Last Update Date: 2003-04-16   * Version: V1.0.00   *****************************************************************************/   GO      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   /*****************************************************************************   * Name: MD5_m_OnBits   * Description: 常数组   *****************************************************************************/   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      -- 00000000000000000000000000000001         WHEN 1 THEN 3      -- 00000000000000000000000000000011         WHEN 2 THEN 7      -- 00000000000000000000000000000111         WHEN 3 THEN 15      -- 00000000000000000000000000001111         WHEN 4 THEN 31      -- 00000000000000000000000000011111         WHEN 5 THEN 63      -- 00000000000000000000000000111111         WHEN 6 THEN 127     -- 00000000000000000000000001111111         WHEN 7 THEN 255     -- 00000000000000000000000011111111         WHEN 8 THEN 511     -- 00000000000000000000000111111111         WHEN 9 THEN 1023     -- 00000000000000000000001111111111         WHEN 10 THEN 2047     -- 00000000000000000000011111111111         WHEN 11 THEN 4095     -- 00000000000000000000111111111111         WHEN 12 THEN 8191     -- 00000000000000000001111111111111         WHEN 13 THEN 16383    -- 00000000000000000011111111111111         WHEN 14 THEN 32767    -- 00000000000000000111111111111111         WHEN 15 THEN 65535    -- 00000000000000001111111111111111         WHEN 16 THEN 131071    -- 00000000000000011111111111111111         WHEN 17 THEN 262143    -- 00000000000000111111111111111111         WHEN 18 THEN 524287    -- 00000000000001111111111111111111         WHEN 19 THEN 1048575   -- 00000000000011111111111111111111         WHEN 20 THEN 2097151   -- 00000000000111111111111111111111         WHEN 21 THEN 4194303   -- 00000000001111111111111111111111         WHEN 22 THEN 8388607   -- 00000000011111111111111111111111         WHEN 23 THEN 16777215   -- 00000000111111111111111111111111         WHEN 24 THEN 33554431   -- 00000001111111111111111111111111         WHEN 25 THEN 67108863   -- 00000011111111111111111111111111         WHEN 26 THEN 134217727  -- 00000111111111111111111111111111         WHEN 27 THEN 268435455  -- 00001111111111111111111111111111         WHEN 28 THEN 536870911  -- 00011111111111111111111111111111         WHEN 29 THEN 1073741823  -- 00111111111111111111111111111111         WHEN 30 THEN 2147483647  -- 01111111111111111111111111111111         ELSE 0       END     RETURN(@iRes)   END   GO      IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_m_2Power]') AND xtype IN(N'FN', N'IF', N'TF'))     DROP FUNCTION [dbo].[MD5_m_2Power]   GO   /*****************************************************************************   * Name: MD5_m_2Power   * Description: 常数组   *****************************************************************************/   CREATE FUNCTION dbo.MD5_m_2Power(     @i  TINYINT   )   RETURNS INT   WITH ENCRYPTION   AS   BEGIN     DECLARE @iRes  INT     SELECT @iRes =       CASE @i         WHEN 0 THEN 1      -- 00000000000000000000000000000001         WHEN 1 THEN 2      -- 00000000000000000000000000000010         WHEN 2 THEN 4      -- 00000000000000000000000000000100         WHEN 3 THEN 8      -- 00000000000000000000000000001000         WHEN 4 THEN 16      -- 00000000000000000000000000010000         WHEN 5 THEN 32      -- 00000000000000000000000000100000         WHEN 6 THEN 64      -- 00000000000000000000000001000000         WHEN 7 THEN 128     -- 00000000000000000000000010000000         WHEN 8 THEN 256     -- 00000000000000000000000100000000         WHEN 9 THEN 512     -- 00000000000000000000001000000000         WHEN 10 THEN 1024     -- 00000000000000000000010000000000         WHEN 11 THEN 2048     -- 00000000000000000000100000000000         WHEN 12 THEN 4096     -- 00000000000000000001000000000000         WHEN 13 THEN 8192     -- 00000000000000000010000000000000         WHEN 14 THEN 16384    -- 00000000000000000100000000000000         WHEN 15 THEN 32768    -- 00000000000000001000000000000000         WHEN 16 THEN 65536    -- 00000000000000010000000000000000         WHEN 17 THEN 131072    -- 00000000000000100000000000000000         WHEN 18 THEN 262144    -- 00000000000001000000000000000000         WHEN 19 THEN 524288    -- 00000000000010000000000000000000         WHEN 20 THEN 1048576   -- 00000000000100000000000000000000         WHEN 21 THEN 2097152   -- 00000000001000000000000000000000         WHEN 22 THEN 4194304   -- 00000000010000000000000000000000         WHEN 23 THEN 8388608   -- 00000000100000000000000000000000         WHEN 24 THEN 16777216   -- 00000001000000000000000000000000         WHEN 25 THEN 33554432   -- 00000010000000000000000000000000         WHEN 26 THEN 67108864   -- 00000100000000000000000000000000         WHEN 27 THEN 134217728  -- 00001000000000000000000000000000         WHEN 28 THEN 268435456  -- 00010000000000000000000000000000         WHEN 29 THEN 536870912  -- 00100000000000000000000000000000         WHEN 30 THEN 1073741824  -- 01000000000000000000000000000000         ELSE 0       END     RETURN(@iRes)   END   GO      IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_LShift]') AND xtype IN(N'FN', N'IF', N'TF'))     DROP FUNCTION [dbo].[MD5_LShift]   GO   /*****************************************************************************   * Name: MD5_LShift   * Description: MD5_LShift   *****************************************************************************/   CREATE FUNCTION dbo.MD5_LShift(      @iValue    INT     ,@iShiftBits  TINYINT   )   RETURNS INT   WITH ENCRYPTION   AS   BEGIN     DECLARE @iRes  BIGINT     SET @iRes = CAST(@iValue AS BINARY(8))     SET @iRes = @iRes * dbo.MD5_m_2Power(@iShiftBits)     RETURN(CAST(@iRes & 0x00000000FFFFFFFF AS BINARY(4)))   END   GO      IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_RShift]') AND xtype IN(N'FN', N'IF', N'TF'))     DROP FUNCTION [dbo].[MD5 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表