zoukankan      html  css  js  c++  java
  • 在 Sql Server 中使用 MD5 加密

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


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

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

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

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

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

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

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

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

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

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

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

    /*****************************************************************************
    * Name: MD5
    * Description: MD5
    *****************************************************************************/
    CREATE FUNCTION dbo.MD5(
    @sOrigMess NVARCHAR(4000),
    @iLength INT
    )
    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

       IF @iLength=32
        SET @sRes = dbo.MD5_WordToHex(@a) + dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c) + dbo.MD5_WordToHex(@d)
       ELSE
        SET @sRes = dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c)

     SET @sRes = LOWER(@sRes)
        RETURN(@sRes)
    END
    GO

  • 相关阅读:
    Apache 2.4+php 5.4 安装
    Linux 进程状态
    解决Redhat Linux AS使用yum时出现This system is not registered with RHN的问题(改用CentOS的yum)
    nagios 事件处理
    awk调用shell命令的两种方法:system与print
    磁盘性能分析
    如何通过JQuery将DIV的滚动条滚动到指定的位置
    GCC Windows Linux 下编译学习1
    Linux命令
    GCC Windows Linux 下编译学习2
  • 原文地址:https://www.cnblogs.com/Spring/p/812206.html
Copyright © 2011-2022 走看看