我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 数据库 > SQL Server > MD5算法的T-SQL实现(FORSQL2000)(一)
热门文章排行
热门文章排行 Oracle的客户端工具--sql*plus(二(10-18)
如何将Access和Excel导入到Mysql中之(11-16)
用SQL进行函数查询(12-15)
Oracle 9i 数据库WITH查询语法小议(12-15)
优化Oracle库表设计的若干方法(12-15)
精采文章排行
精采文章排行 用代码打开Access文件的两种方法(11-17)
SQL Server 2000企业版安装教程(1)(11-16)
SQL数据操作基础(初级1)(11-16)
SQL数据操作基础(中级1)(11-16)
mssql 数据库的备份与恢复(11-16)
技术专题推荐
网管论坛交流
 

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

作者:佚名   来源:Linux 宝库   点击:   日期:2006-12-15


-->


  /*****************************************************************************
  * 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







文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Oracle数据库的安全策略分析(三) ·Oracle数据库的安全策略分析(二)
·SCO unix 下定时备份 Oracle dmp 文件 ·Oracle 9i密码策略--密码重用规则
·Oracle SQL 内置函数的使用方法及结果 ·WindowsXP下安装Oracle9i问题二则

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。