<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    GalaxyPilot —— D.S


            生命不熄,戰斗不止
    數據加載中……

    MD5 T-SQL版

    代碼中含有UNICODE字符,要調試得先把這些字符刪了

    /*****************************************************************************
    * 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_RShift]
    GO
    /*****************************************************************************
    * Name: MD5_RShift
    * Description: MD5_RShift
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_RShift(
       @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_RotateLeft]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_RotateLeft]
    GO
    /*****************************************************************************
    * Name: MD5_RotateLeft
    * Description: MD5_RotateLeft
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_RotateLeft(
       @iValue    INT
      ,@iShiftBits  TINYINT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      RETURN(dbo.MD5_LShift(@iValue, @iShiftBits) | dbo.MD5_RShift(@iValue, (32 - @iShiftBits)))
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_AddUnsigned]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_AddUnsigned]
    GO
    /*****************************************************************************
    * Name: MD5_AddUnsigned
    * Description: MD5_AddUnsigned
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_AddUnsigned(
       @iX    INT
      ,@iY    INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      DECLARE @iRes  BIGINT
      SET @iRes = CAST(CAST(@iX AS BINARY(8)) AS BIGINT) + CAST(CAST(@iY AS BINARY(8)) AS BIGINT)
      RETURN(CAST(@iRes & 0x00000000FFFFFFFF AS BINARY(4)))
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_F]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_F]
    GO
    /*****************************************************************************
    * Name: MD5_F
    * Description: MD5_F
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_F(
       @x    INT
      ,@y    INT
      ,@z    INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      RETURN((@x & @y) | ((~@x) & @z))
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_G]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_G]
    GO
    /*****************************************************************************
    * Name: MD5_G
    * Description: MD5_G
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_G(
       @x    INT
      ,@y    INT
      ,@z    INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      RETURN((@x & @z) | (@y & (~@z)))
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_H]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_H]
    GO
    /*****************************************************************************
    * Name: MD5_H
    * Description: MD5_H
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_H(
       @x    INT
      ,@y    INT
      ,@z    INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      RETURN(@x ^ @y ^ @z)
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_I]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_I]
    GO
    /*****************************************************************************
    * Name: MD5_I
    * Description: MD5_I
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_I(
       @x    INT
      ,@y    INT
      ,@z    INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      RETURN(@y ^ (@x | (~@z)))
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_FF]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_FF]
    GO
    /*****************************************************************************
    * Name: MD5_FF
    * Description: MD5_FF
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_FF(
       @a    INT
      ,@b    INT
      ,@c    INT
      ,@d    INT
      ,@x    INT
      ,@s   INT
      ,@ac  INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      SET @a = dbo.MD5_AddUnsigned(@a, dbo.MD5_AddUnsigned(dbo.MD5_AddUnsigned(dbo.MD5_F(@b, @c, @d), @x), @ac))
      SET @a = dbo.MD5_RotateLeft(@a, @s)
      SET @a = dbo.MD5_AddUnsigned(@a, @b)
      RETURN(@a)
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_GG]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_GG]
    GO
    /*****************************************************************************
    * Name: MD5_GG
    * Description: MD5_GG
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_GG(
       @a    INT
      ,@b    INT
      ,@c    INT
      ,@d    INT
      ,@x    INT
      ,@s   INT
      ,@ac  INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      SET @a = dbo.MD5_AddUnsigned(@a, dbo.MD5_AddUnsigned(dbo.MD5_AddUnsigned(dbo.MD5_G(@b, @c, @d), @x), @ac))
      SET @a = dbo.MD5_RotateLeft(@a, @s)
      SET @a = dbo.MD5_AddUnsigned(@a, @b)
      RETURN(@a)
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_HH]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_HH]
    GO
    /*****************************************************************************
    * Name: MD5_HH
    * Description: MD5_HH
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_HH(
       @a    INT
      ,@b    INT
      ,@c    INT
      ,@d    INT
      ,@x    INT
      ,@s   INT
      ,@ac  INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      SET @a = dbo.MD5_AddUnsigned(@a, dbo.MD5_AddUnsigned(dbo.MD5_AddUnsigned(dbo.MD5_H(@b, @c, @d), @x), @ac))
      SET @a = dbo.MD5_RotateLeft(@a, @s)
      SET @a = dbo.MD5_AddUnsigned(@a, @b)
      RETURN(@a)
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_II]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_II]
    GO
    /*****************************************************************************
    * Name: MD5_II
    * Description: MD5_II
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_II(
       @a    INT
      ,@b    INT
      ,@c    INT
      ,@d    INT
      ,@x    INT
      ,@s   INT
      ,@ac  INT
    )
    RETURNS INT
    WITH ENCRYPTION
    AS
    BEGIN
      SET @a = dbo.MD5_AddUnsigned(@a, dbo.MD5_AddUnsigned(dbo.MD5_AddUnsigned(dbo.MD5_I(@b, @c, @d), @x), @ac))
      SET @a = dbo.MD5_RotateLeft(@a, @s)
      SET @a = dbo.MD5_AddUnsigned(@a, @b)
      RETURN(@a)
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_ConvertToWordArray]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_ConvertToWordArray]
    GO
    /*****************************************************************************
    * Name: MD5_ConvertToWordArray
    * Description: MD5_ConvertToWordArray
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_ConvertToWordArray(
       @sOrigMess    VARCHAR(8000)  = '
    )
    RETURNS @tWordArray TABLE([ID] INT IDENTITY(0,1),[Word] INT)
    WITH ENCRYPTION
    AS
    BEGIN
      IF @sOrigMess IS NULL
        SET @sOrigMess = '

      DECLARE @iLenOfMess      INT
      DECLARE @iWordArrayLen    INT
      DECLARE @iPosOfWord      INT
      DECLARE @iPosOfMess      INT
      DECLARE @iCountOfWord    INT

      SET @iLenOfMess = LEN(@sOrigMess)
      SET @iWordArrayLen = ((@iLenOfMess + 8)/64 + 1) * 16
      SET @iCountOfWord = 0
      WHILE(@iCountOfWord<@iWordArrayLen)
      BEGIN
        INSERT INTO @tWordArray([Word]) VALUES(0)
        SET @iCountOfWord = @iCountOfWord + 1
      END

      SELECT @iPosOfMess = 0, @iPosOfWord = 0, @iCountOfWord = 0
      WHILE(@iPosOfMess < @iLenOfMess)
      BEGIN
        SELECT @iCountOfWord = @iPosOfMess / 4, @iPosOfWord = @iPosOfMess % 4
        UPDATE @tWordArray
          SET [Word] = [Word] | dbo.MD5_LShift(UNICODE(SUBSTRING(@sOrigMess,@iPosOfMess+1,1)),@iPosOfWord*8)
          WHERE [ID] = @iCountOfWord
        SET @iPosOfMess = @iPosOfMess + 1
      END
      
      SELECT @iCountOfWord = @iPosOfMess / 4, @iPosOfWord = @iPosOfMess % 4
      UPDATE @tWordArray
        SET [Word] = [Word] | dbo.MD5_LShift(0x80,@iPosOfWord*8)
        WHERE [ID] = @iCountOfWord

      UPDATE @tWordArray
        SET [Word] = [Word] | dbo.MD5_LShift(@iLenOfMess,3)
        WHERE [ID] = @iWordArrayLen - 2
      UPDATE @tWordArray
        SET [Word] = [Word] | dbo.MD5_RShift(@iLenOfMess,29)
        WHERE [ID] = @iWordArrayLen - 1
      RETURN
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5_WordToHex]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5_WordToHex]
    GO
    /*****************************************************************************
    * Name: MD5_WordToHex
    * Description: MD5_WordToHex
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5_WordToHex(
       @iValue    INT
    )
    RETURNS CHAR(8)
    WITH ENCRYPTION
    AS
    BEGIN
      DECLARE @sRes  VARCHAR(8)
      DECLARE @iTmp  INT
      DECLARE @iCount TINYINT

      SELECT @sRes = ', @iCount = 0
      WHILE(@iCount<4)
      BEGIN
        SET @iTmp = dbo.MD5_RShift(@iValue,@iCount*8) & 0x000000FF
        SET @sRes = @sRes + CASE @iTmp / 16 WHEN 0 THEN '0'
                          WHEN 1 THEN '1'
                          WHEN 2 THEN '2'
                          WHEN 3 THEN '3'
                          WHEN 4 THEN '4'
                          WHEN 5 THEN '5'
                          WHEN 6 THEN '6'
                          WHEN 7 THEN '7'
                          WHEN 8 THEN '8'
                          WHEN 9 THEN '9'
                          WHEN 10 THEN 'A'
                          WHEN 11 THEN 'B'
                          WHEN 12 THEN 'C'
                          WHEN 13 THEN 'D'
                          WHEN 14 THEN 'E'
                          WHEN 15 THEN 'F'
                          ELSE ' END
                 + CASE @iTmp % 16 WHEN 0 THEN '0'
                          WHEN 1 THEN '1'
                          WHEN 2 THEN '2'
                          WHEN 3 THEN '3'
                          WHEN 4 THEN '4'
                          WHEN 5 THEN '5'
                          WHEN 6 THEN '6'
                          WHEN 7 THEN '7'
                          WHEN 8 THEN '8'
                          WHEN 9 THEN '9'
                          WHEN 10 THEN 'A'
                          WHEN 11 THEN 'B'
                          WHEN 12 THEN 'C'
                          WHEN 13 THEN 'D'
                          WHEN 14 THEN 'E'
                          WHEN 15 THEN 'F'
                          ELSE ' END
        SET @iCount = @iCount + 1
      END
      RETURN(@sRes)
    END
    GO

    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MD5]') AND xtype IN(N'FN', N'IF', N'TF'))
      DROP FUNCTION [dbo].[MD5]
    GO
    /*****************************************************************************
    * Name: MD5
    * Description: MD5
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5(
       @sOrigMess  NVARCHAR(4000)
    )
    RETURNS CHAR(32)
    WITH ENCRYPTION
    AS
    BEGIN
      --====================================
      DECLARE @S11 TINYINT
      DECLARE @S12 TINYINT
      DECLARE @S13 TINYINT
      DECLARE @S14 TINYINT
      DECLARE @S21 TINYINT
      DECLARE @S22 TINYINT
      DECLARE @S23 TINYINT
      DECLARE @S24 TINYINT
      DECLARE @S31 TINYINT
      DECLARE @S32 TINYINT
      DECLARE @S33 TINYINT
      DECLARE @S34 TINYINT
      DECLARE @S41 TINYINT
      DECLARE @S42 TINYINT
      DECLARE @S43 TINYINT
      DECLARE @S44 TINYINT

      SELECT @S11 = 7, @S12 = 12, @S13 = 17, @S14 = 22
      SELECT @S21 = 5, @S22 = 9, @S23 = 14, @S24 = 20
      SELECT @S31 = 4, @S32 = 11, @S33 = 16, @S34 = 23
      SELECT @S41 = 6, @S42 = 10, @S43 = 15, @S44 = 21
      --====================================
      DECLARE @a INT
      DECLARE @b INT
      DECLARE @c INT
      DECLARE @d INT
      DECLARE @AA  INT
      DECLARE @BB  INT
      DECLARE @CC  INT
      DECLARE @DD  INT

      SELECT  @a = 0x67452301
          ,@b = 0xEFCDAB89
          ,@c = 0x98BADCFE
          ,@d = 0x10325476
      --====================================
      DECLARE @sRes  VARCHAR(32)
      SET @sRes = '
      DECLARE @iWordArrayLen    INT
      DECLARE @iWordArrayCount  INT

      DECLARE @tTmp TABLE([ID] INT, [Word] INT)
      INSERT INTO @tTmp SELECT * FROM dbo.MD5_ConvertToWordArray(@sOrigMess)
      SELECT @iWordArrayCount=0, @iWordArrayLen = COUNT(*) FROM @tTmp

      WHILE(@iWordArrayCount < @iWordArrayLen)
      BEGIN
        SELECT @AA = @a, @BB = @b, @CC = @c, @DD = @d

        SELECT @a = dbo.MD5_FF(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 0), @S11, 0xD76AA478)
        SELECT @d = dbo.MD5_FF(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 1), @S12, 0xE8C7B756)
        SELECT @c = dbo.MD5_FF(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 2), @S13, 0x242070DB)
        SELECT @b = dbo.MD5_FF(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 3), @S14, 0xC1BDCEEE)
        SELECT @a = dbo.MD5_FF(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 4), @S11, 0xF57C0FAF)
        SELECT @d = dbo.MD5_FF(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 5), @S12, 0x4787C62A)
        SELECT @c = dbo.MD5_FF(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 6), @S13, 0xA8304613)
        SELECT @b = dbo.MD5_FF(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 7), @S14, 0xFD469501)
        SELECT @a = dbo.MD5_FF(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 8), @S11, 0x698098D8)
        SELECT @d = dbo.MD5_FF(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 9), @S12, 0x8B44F7AF)
        SELECT @c = dbo.MD5_FF(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 10), @S13, 0xFFFF5BB1)
        SELECT @b = dbo.MD5_FF(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 11), @S14, 0x895CD7BE)
        SELECT @a = dbo.MD5_FF(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 12), @S11, 0x6B901122)
        SELECT @d = dbo.MD5_FF(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 13), @S12, 0xFD987193)
        SELECT @c = dbo.MD5_FF(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 14), @S13, 0xA679438E)
        SELECT @b = dbo.MD5_FF(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 15), @S14, 0x49B40821)

        SELECT @a = dbo.MD5_GG(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 1), @S21, 0xF61E2562)
        SELECT @d = dbo.MD5_GG(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 6), @S22, 0xC040B340)
        SELECT @c = dbo.MD5_GG(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 11), @S23, 0x265E5A51)
        SELECT @b = dbo.MD5_GG(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 0), @S24, 0xE9B6C7AA)
        SELECT @a = dbo.MD5_GG(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 5), @S21, 0xD62F105D)
        SELECT @d = dbo.MD5_GG(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 10), @S22, 0x2441453)
        SELECT @c = dbo.MD5_GG(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 15), @S23, 0xD8A1E681)
        SELECT @b = dbo.MD5_GG(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 4), @S24, 0xE7D3FBC8)
        SELECT @a = dbo.MD5_GG(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 9), @S21, 0x21E1CDE6)
        SELECT @d = dbo.MD5_GG(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 14), @S22, 0xC33707D6)
        SELECT @c = dbo.MD5_GG(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 3), @S23, 0xF4D50D87)
        SELECT @b = dbo.MD5_GG(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 8), @S24, 0x455A14ED)
        SELECT @a = dbo.MD5_GG(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 13), @S21, 0xA9E3E905)
        SELECT @d = dbo.MD5_GG(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 2), @S22, 0xFCEFA3F8)
        SELECT @c = dbo.MD5_GG(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 7), @S23, 0x676F02D9)
        SELECT @b = dbo.MD5_GG(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 12), @S24, 0x8D2A4C8A)

        SELECT @a = dbo.MD5_HH(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 5), @S31, 0xFFFA3942)
        SELECT @d = dbo.MD5_HH(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 8), @S32, 0x8771F681)
        SELECT @c = dbo.MD5_HH(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 11), @S33, 0x6D9D6122)
        SELECT @b = dbo.MD5_HH(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 14), @S34, 0xFDE5380C)
        SELECT @a = dbo.MD5_HH(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 1), @S31, 0xA4BEEA44)
        SELECT @d = dbo.MD5_HH(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 4), @S32, 0x4BDECFA9)
        SELECT @c = dbo.MD5_HH(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 7), @S33, 0xF6BB4B60)
        SELECT @b = dbo.MD5_HH(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 10), @S34, 0xBEBFBC70)
        SELECT @a = dbo.MD5_HH(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 13), @S31, 0x289B7EC6)
        SELECT @d = dbo.MD5_HH(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 0), @S32, 0xEAA127FA)
        SELECT @c = dbo.MD5_HH(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 3), @S33, 0xD4EF3085)
        SELECT @b = dbo.MD5_HH(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 6), @S34, 0x4881D05)
        SELECT @a = dbo.MD5_HH(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 9), @S31, 0xD9D4D039)
        SELECT @d = dbo.MD5_HH(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 12), @S32, 0xE6DB99E5)
        SELECT @c = dbo.MD5_HH(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 15), @S33, 0x1FA27CF8)
        SELECT @b = dbo.MD5_HH(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 2), @S34, 0xC4AC5665)

        SELECT @a = dbo.MD5_II(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 0), @S41, 0xF4292244)
        SELECT @d = dbo.MD5_II(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 7), @S42, 0x432AFF97)
        SELECT @c = dbo.MD5_II(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 14), @S43, 0xAB9423A7)
        SELECT @b = dbo.MD5_II(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 5), @S44, 0xFC93A039)
        SELECT @a = dbo.MD5_II(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 12), @S41, 0x655B59C3)
        SELECT @d = dbo.MD5_II(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 3), @S42, 0x8F0CCC92)
        SELECT @c = dbo.MD5_II(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 10), @S43, 0xFFEFF47D)
        SELECT @b = dbo.MD5_II(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 1), @S44, 0x85845DD1)
        SELECT @a = dbo.MD5_II(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 8), @S41, 0x6FA87E4F)
        SELECT @d = dbo.MD5_II(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 15), @S42, 0xFE2CE6E0)
        SELECT @c = dbo.MD5_II(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 6), @S43, 0xA3014314)
        SELECT @b = dbo.MD5_II(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 13), @S44, 0x4E0811A1)
        SELECT @a = dbo.MD5_II(@a, @b, @c, @d, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 4), @S41, 0xF7537E82)
        SELECT @d = dbo.MD5_II(@d, @a, @b, @c, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 11), @S42, 0xBD3AF235)
        SELECT @c = dbo.MD5_II(@c, @d, @a, @b, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 2), @S43, 0x2AD7D2BB)
        SELECT @b = dbo.MD5_II(@b, @c, @d, @a, (SELECT [Word] FROM @tTmp WHERE [ID] = @iWordArrayCount + 9), @S44, 0xEB86D391)

        SET @a = dbo.MD5_AddUnsigned(@a, @AA)
        SET @b = dbo.MD5_AddUnsigned(@b, @BB)
        SET @c = dbo.MD5_AddUnsigned(@c, @CC)
        SET @d = dbo.MD5_AddUnsigned(@d, @DD)

        SET @iWordArrayCount = @iWordArrayCount + 16
      END

      SET @sRes = dbo.MD5_WordToHex(@a) + dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c) + dbo.MD5_WordToHex(@d)
      SET @sRes = LOWER(@sRes)
      RETURN(@sRes)
    END
    GO

    --Test
    set nocount on
    select dbo.MD5(') as 'MD5('')'
    union
    select 'd41d8cd98f00b204e9800998ecf8427e'

    select dbo.MD5('a') as 'MD5('a')'
    union
    select '0cc175b9c0f1b6a831c399e269772661'

    select dbo.MD5('abc') as 'MD5('abc')'
    union
    select '900150983cd24fb0d6963f7d28e17f72'

    select dbo.MD5('message digest') as 'MD5('message digest')'
    union
    select 'f96b697d7cb7938d525a2f31aaf161d0'

    select dbo.MD5('abcdefghijklmnopqrstuvwxyz') as 'MD5('abcdefghijklmnopqrstuvwxyz')'
    union
    select 'c3fcd3d76192e4007dfb496cca67e13b'

    select dbo.MD5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') as 'MD5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')'
    union
    select 'd174ab98d277d9f5a5611c2c9f419d9f'

    select dbo.MD5('12345678901234567890123456789012345678901234567890123456789012345678901234567890') as 'MD5('12345678901234567890123456789012345678901234567890123456789012345678901234567890')'
    union
    select '57edf4a22be3c955ac49da2e2107b67a'

    select dbo.MD5('我') as 'MD5('我')'
    union
    select 'a31d0f25367ebe046897f8a939ca4a9f'

    posted on 2006-02-24 11:50 舵手 閱讀(1076) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 一日本道a高清免费播放| 鲁啊鲁在线视频免费播放| 亚洲国产精彩中文乱码AV| 国产偷国产偷亚洲清高动态图| 亚洲日韩国产精品第一页一区| 亚洲国产成人综合| 亚洲成a人片在线观看天堂无码| 丰满妇女做a级毛片免费观看| 免费真实播放国产乱子伦| 亚洲a在线视频视频| 亚洲AV噜噜一区二区三区| 麻豆精品不卡国产免费看| 午夜福利不卡片在线播放免费| 日本免费一区二区三区最新| 亚洲AV综合色区无码另类小说| 欧洲精品码一区二区三区免费看| 久久久久久久91精品免费观看| 亚洲综合偷自成人网第页色 | 亚洲大成色www永久网址| ww在线观视频免费观看w| 亚洲精品乱码久久久久久蜜桃不卡 | 97在线线免费观看视频在线观看 | 亚洲精品宾馆在线精品酒店| 国产大片91精品免费观看男同 | 亚洲综合精品一二三区在线| 边摸边吃奶边做爽免费视频99 | 久久久久亚洲AV无码永不| 免费能直接在线观看黄的视频| JLZZJLZZ亚洲乱熟无码| 亚洲成av人片在www鸭子| 亚洲A丁香五香天堂网| 亚洲一区二区三区成人网站| 亚洲免费视频观看| 亚洲AV日韩AV无码污污网站| 伊伊人成亚洲综合人网7777| 99re热免费精品视频观看| 人妻18毛片a级毛片免费看| 免费国产在线观看不卡| 亚洲第一成年网站视频| 亚洲午夜久久久影院| 久久精品免费一区二区喷潮 |