Sqlserver MD5 加密

    技术2022-05-11  83

    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 INTWITH ENCRYPTIONASBEGINDECLARE @iRes INTSELECT @iRes =CASE @iWHEN 0 THEN 1 -- 00000000000000000000000000000001WHEN 1 THEN 3 -- 00000000000000000000000000000011WHEN 2 THEN 7 -- 00000000000000000000000000000111WHEN 3 THEN 15 -- 00000000000000000000000000001111WHEN 4 THEN 31 -- 00000000000000000000000000011111WHEN 5 THEN 63 -- 00000000000000000000000000111111WHEN 6 THEN 127 -- 00000000000000000000000001111111WHEN 7 THEN 255 -- 00000000000000000000000011111111WHEN 8 THEN 511 -- 00000000000000000000000111111111WHEN 9 THEN 1023 -- 00000000000000000000001111111111WHEN 10 THEN 2047 -- 00000000000000000000011111111111WHEN 11 THEN 4095 -- 00000000000000000000111111111111WHEN 12 THEN 8191 -- 00000000000000000001111111111111WHEN 13 THEN 16383 -- 00000000000000000011111111111111WHEN 14 THEN 32767 -- 00000000000000000111111111111111WHEN 15 THEN 65535 -- 00000000000000001111111111111111WHEN 16 THEN 131071 -- 00000000000000011111111111111111WHEN 17 THEN 262143 -- 00000000000000111111111111111111WHEN 18 THEN 524287 -- 00000000000001111111111111111111WHEN 19 THEN 1048575 -- 00000000000011111111111111111111WHEN 20 THEN 2097151 -- 00000000000111111111111111111111WHEN 21 THEN 4194303 -- 00000000001111111111111111111111WHEN 22 THEN 8388607 -- 00000000011111111111111111111111WHEN 23 THEN 16777215 -- 00000000111111111111111111111111WHEN 24 THEN 33554431 -- 00000001111111111111111111111111WHEN 25 THEN 67108863 -- 00000011111111111111111111111111WHEN 26 THEN 134217727 -- 00000111111111111111111111111111WHEN 27 THEN 268435455 -- 00001111111111111111111111111111WHEN 28 THEN 536870911 -- 00011111111111111111111111111111WHEN 29 THEN 1073741823 -- 00111111111111111111111111111111WHEN 30 THEN 2147483647 -- 01111111111111111111111111111111ELSE 0ENDRETURN(@iRes)ENDGO

    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 INTWITH ENCRYPTIONASBEGINDECLARE @iRes INTSELECT @iRes =CASE @iWHEN 0 THEN 1 -- 00000000000000000000000000000001WHEN 1 THEN 2 -- 00000000000000000000000000000010WHEN 2 THEN 4 -- 00000000000000000000000000000100WHEN 3 THEN 8 -- 00000000000000000000000000001000WHEN 4 THEN 16 -- 00000000000000000000000000010000WHEN 5 THEN 32 -- 00000000000000000000000000100000WHEN 6 THEN 64 -- 00000000000000000000000001000000WHEN 7 THEN 128 -- 00000000000000000000000010000000WHEN 8 THEN 256 -- 00000000000000000000000100000000WHEN 9 THEN 512 -- 00000000000000000000001000000000WHEN 10 THEN 1024 -- 00000000000000000000010000000000WHEN 11 THEN 2048 -- 00000000000000000000100000000000WHEN 12 THEN 4096 -- 00000000000000000001000000000000WHEN 13 THEN 8192 -- 00000000000000000010000000000000WHEN 14 THEN 16384 -- 00000000000000000100000000000000WHEN 15 THEN 32768 -- 00000000000000001000000000000000WHEN 16 THEN 65536 -- 00000000000000010000000000000000WHEN 17 THEN 131072 -- 00000000000000100000000000000000WHEN 18 THEN 262144 -- 00000000000001000000000000000000WHEN 19 THEN 524288 -- 00000000000010000000000000000000WHEN 20 THEN 1048576 -- 00000000000100000000000000000000WHEN 21 THEN 2097152 -- 00000000001000000000000000000000WHEN 22 THEN 4194304 -- 00000000010000000000000000000000WHEN 23 THEN 8388608 -- 00000000100000000000000000000000WHEN 24 THEN 16777216 -- 00000001000000000000000000000000WHEN 25 THEN 33554432 -- 00000010000000000000000000000000WHEN 26 THEN 67108864 -- 00000100000000000000000000000000WHEN 27 THEN 134217728 -- 00001000000000000000000000000000WHEN 28 THEN 268435456 -- 00010000000000000000000000000000WHEN 29 THEN 536870912 -- 00100000000000000000000000000000WHEN 30 THEN 1073741824 -- 01000000000000000000000000000000ELSE 0ENDRETURN(@iRes)ENDGO

    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 INTWITH ENCRYPTIONASBEGINDECLARE @iRes BIGINTSET @iRes = CAST(@ivalue AS BINARY(8))SET @iRes = @iRes * dbo.MD5_m_2Power(@iShiftBits)RETURN(CAST(@iRes & 0x00000000FFFFFFFF AS BINARY(4)))ENDGO

    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 INTWITH ENCRYPTIONASBEGINDECLARE @iRes BIGINTSET @iRes = CAST(@ivalue AS BINARY(8))SET @iRes = @iRes / dbo.MD5_m_2Power(@iShiftBits)RETURN(CAST(@iRes & 0x00000000FFFFFFFF AS BINARY(4)))ENDGO

    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 INTWITH ENCRYPTIONASBEGINRETURN(dbo.MD5_LShift(@ivalue, @iShiftBits) | dbo.MD5_RShift(@ivalue, (32 - @iShiftBits)))ENDGO

    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 INTWITH ENCRYPTIONASBEGINDECLARE @iRes BIGINTSET @iRes = CAST(CAST(@iX AS BINARY(8)) AS BIGINT) + CAST(CAST(@iY AS BINARY(8)) AS BIGINT)RETURN(CAST(@iRes & 0x00000000FFFFFFFF AS BINARY(4)))ENDGOIF 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 INTWITH ENCRYPTIONASBEGINRETURN((@x & @y) | ((~@x) & @z))ENDGO

    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 INTWITH ENCRYPTIONASBEGINRETURN((@x & @z) | (@y & (~@z)))ENDGO

    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 INTWITH ENCRYPTIONASBEGINRETURN(@x ^ @y ^ @z)ENDGO

    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 INTWITH ENCRYPTIONASBEGINRETURN(@y ^ (@x | (~@z)))ENDGO

    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 INTWITH ENCRYPTIONASBEGINSET @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)ENDGO

    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 INTWITH ENCRYPTIONASBEGINSET @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)ENDGO

    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 INTWITH ENCRYPTIONASBEGINSET @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)ENDGO

    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 INTWITH ENCRYPTIONASBEGINSET @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)ENDGOIF 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 ENCRYPTIONASBEGINIF @sOrigMess IS NULLSET @sOrigMess = ''

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

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

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

    SELECT @iCountOfWord = @iPosOfMess / 4, @iPosOfWord = @iPosOfMess % 4UPDATE @tWordArraySET [Word] = [Word] | dbo.MD5_LShift(0x80,@iPosOfWord*8)WHERE [ID] = @iCountOfWord

    UPDATE @tWordArraySET [Word] = [Word] | dbo.MD5_LShift(@iLenOfMess,3)WHERE [ID] = @iWordArrayLen - 2UPDATE @tWordArraySET [Word] = [Word] | dbo.MD5_RShift(@iLenOfMess,29)WHERE [ID] = @iWordArrayLen - 1RETURNENDGOIF 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 ENCRYPTIONASBEGINDECLARE @sRes VARCHAR(8)DECLARE @iTmp INTDECLARE @iCount TINYINT

    SELECT @sRes = '', @iCount = 0WHILE(@iCount<4)BEGINSET @iTmp = dbo.MD5_RShift(@ivalue,@iCount*8) & 0x000000FFSET @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 '' ENDSET @iCount = @iCount + 1ENDRETURN(@sRes)ENDGO

    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 ENCRYPTIONASBEGIN--====================================DECLARE @S11 TINYINTDECLARE @S12 TINYINTDECLARE @S13 TINYINTDECLARE @S14 TINYINTDECLARE @S21 TINYINTDECLARE @S22 TINYINTDECLARE @S23 TINYINTDECLARE @S24 TINYINTDECLARE @S31 TINYINTDECLARE @S32 TINYINTDECLARE @S33 TINYINTDECLARE @S34 TINYINTDECLARE @S41 TINYINTDECLARE @S42 TINYINTDECLARE @S43 TINYINTDECLARE @S44 TINYINT

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

    SELECT @a = 0x67452301,@b = 0xEFCDAB89,@c = 0x98BADCFE,@d = 0x10325476--====================================DECLARE @sRes VARCHAR(32)SET @sRes = ''DECLARE @iWordArrayLen INTDECLARE @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)BEGINSELECT @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 + 16END

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

    --Testset nocount onselect dbo.MD5('') as 'MD5('''')'unionselect 'd41d8cd98f00b204e9800998ecf8427e'

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

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

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

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

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

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

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


    最新回复(0)