<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 舵手 閱讀(1075) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 午夜亚洲WWW湿好爽| 亚洲日本香蕉视频| 特级aa**毛片免费观看| 国产猛烈高潮尖叫视频免费| 亚洲国产精华液2020| 免费看男女下面日出水视频| 最新亚洲人成无码网站| 免费国产真实迷j在线观看| 亚洲.国产.欧美一区二区三区| 免费看小12萝裸体视频国产| 免费看一级高潮毛片| 久久精品国产亚洲7777| 花蝴蝶免费视频在线观看高清版| 亚洲国产另类久久久精品| 99久久99久久精品免费观看| 亚洲国产av美女网站| 特级淫片国产免费高清视频| 免费一区二区三区在线视频| 国产亚洲综合一区柠檬导航| 最近中文字幕mv免费高清在线| 亚洲国产精品综合久久20| 国产精品高清全国免费观看| 一区二区三区免费在线观看| 国产v亚洲v天堂无码网站| 国产成人免费高清激情明星| 337P日本欧洲亚洲大胆精品 | 免费国产叼嘿视频大全网站| 久久水蜜桃亚洲av无码精品麻豆| 黄页网站免费观看| 免费人成再在线观看网站| 亚洲爆乳无码专区| 大学生高清一级毛片免费| 日韩在线一区二区三区免费视频| 亚洲高清在线观看| 国产网站在线免费观看| 国产午夜不卡AV免费| 亚洲另类无码专区丝袜| 伊人久久精品亚洲午夜| 在线看片免费不卡人成视频| 国产成人无码精品久久久久免费| 亚洲电影在线播放|