SQL2000 MD5加密

原文:SQL2000 MD5加密

 

/***************************************************************************** 
* 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 @iWHEN 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 ENDRETURN(@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 BIGINTSET @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 
GOIF 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 ENDSELECT @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 '' ENDSET @iCount=@iCount + 1    ENDRETURN(@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    INTSELECT @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'SELECT    dbo.MD5('a31d0f25367ebe046897f8a939ca4a9f')select dbo.MD5('') as 'MD5('''')' 
select dbo.MD5('') as 'MD5('''')' 
select dbo.MD5('') as 'MD5('''')' select dbo.MD5('') as 'MD5('''')'
select dbo.MD5('') as 'MD5('''')'

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典电影

那些经典的电影&#xff0c;第一波&#xff01;&#xff01; 《怦然心动》&#xff0c;欧美电影——布莱斯全家搬到小镇&#xff0c;邻家女孩朱丽前来帮忙。她对他一见钟情&#xff0c;心愿是获得他的吻。两人是同班同学&#xff0c;她一直想方设法接近他&#xff0c;但是他避之…

go-zero 微服务实战系列(一、开篇)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

大数据时代,怎么做全渠道的营销

大数据时代,怎么做全渠道的营销 营销在中国有很多变化&#xff0c;1978年之前主要是计划经济的时代&#xff0c;寻求政府的保护。1984年进入商品经济之后&#xff0c;中国企业通过大规模的扩大生产&#xff0c;扩大工厂得到生产效率。1992年进入市场经济之后&#xff0c;会涌现…

oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell

oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell <1&#xff0c;>仅安装数据库软件不配置数据库 ./x86oracle.sh /ruiy/ocr/DBSoftware/app/oracle /ruiy/ocr/DBSoftware/app/oraInventory /ruiy/ins_soft.rsp <2&#xff0c;>静默安装数据库软…

hdu 2048 神、上帝以及老天爷

题解&#xff1a; 本题主要思路是&#xff0c;算出i个人的总选择数a和以悲剧结尾的总选择数b&#xff0c;然后b/a&#xff0c;完成。属于递推题&#xff1a; 图中横杠代表人&#xff0c;竖杠代表签名。Ai代表i个人共有A[i]个选择&#xff0c;Bi起过度作用。因为最多有20人&…

探究Presto SQL引擎(3)-代码生成

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Linux下Samba服务器的安装和配置

第一步&#xff1a;sudo apt-get install samba smbclient 安装samba服务器。 第二步&#xff1a;打开/etc/samba/smb.conf文件&#xff0c;在末尾添加下面的字段&#xff1a; [用户名] comment 用户名 path /home/用户名 writable yes 第三步&#xff1a;为samba服务器添加…

fatal error C1083:无法打开包括文件:“stdint.h”: No such file or directory解决方案

stdint.h文件是C99的标准头文件&#xff0c;默认情况下VC是不支持的&#xff0c;所以在使用过程中肯定会碰到 "No such file or directory"的问题。解决办法 1.从网盘上下载一个源码文件网盘链接 &#xff08;提取码&#xff1a;5c42&#xff09; 2.将内部包含的几个…

HTML文本框样式大全

输入框景背景透明&#xff1a;<input style"background:transparent;border:1px solid #ffffff"> 鼠标划过输入框&#xff0c;输入框背景色变色&#xff1a;<INPUT value"Type here" NAME"user_pass" TYPE"text" SIZE"2…

【学习笔记】计算几何

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

固态硬盘跟机械硬盘的区别

固态硬盘&#xff08;Solid State Disk或Solid State Drive&#xff09;&#xff0c;也称作电子硬盘或者固态电子盘&#xff0c;是由控制单元和固态存储单元&#xff08;DRAM或FLASH芯片&#xff09;组成的硬盘。固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相同&a…

支持自动水平拆分的高性能分布式数据库TDSQL

随着互联网应用的广泛普及&#xff0c;海量数据的存储和访问成为系统设计的瓶颈问题。对于大型的互联网应用&#xff0c;每天几十亿的PV无疑对数据库造成了相当高的负载。给系统的稳定性和扩展性造成了极大的问题。通过数据的切分来提高系统整体性能&#xff0c;扩充系统整体容…

『忘了再学』Shell基础 — 27、AWK编程的介绍和基本使用

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Cisco asa 5520 oid

一 Cisco asa CPU LOAD的oid1 5sec CPU 负载1.3.6.1.4.1.9.2.1.562 1min CPU 负载1.3.6.1.4.1.9.2.1.573 5min CPU 负载1.3.6.1.4.1.9.2.1.58 二 Cisco ASA memory的内存1 Processor pool Total:ciscoMemoryPoolUsed ciscoMemoryPoolUsed used: 1.3.6.1.4.1.9.9.48.1.1.…

一些有趣的B+树优化实验

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

JAVA基础----java中E,T,?的区别

遇到<A>,<B>,<K,V>等&#xff0c;是用到了java中的泛型。 一般使用<T>来声明类型持有者名称&#xff0c;自定义泛型类时&#xff0c;类持有者名称可以使用T(Type) 如果是容器的元素可以使用E(Element)&#xff0c;若键值匹配可以用K(Key)和V(Value)等&…

Tarjan的强联通分量

求强联通分量有很多种。 《C信息学奥赛一本通》 中讲过一个dfs求强联通分量的算法Kosdaraju&#xff0c;为了骗字数我就待会简单的说说。然而我们这篇文章的主体是Tarjan&#xff0c;所以我肯定说完之后再赞扬一下Tarjan大法好是不是 首先我们讲一下强联通分量 强联通分量指的…

poj 3321

主要是dfs,只要dfs这一步想到&#xff0c;也就是怎样把问题转化为区间求和&#xff0c;就很容易用树状数组来求解 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn 100000; int head[maxn10],e[maxn10],num[…

XXE漏洞

简介 XXE (XML External Entity Injection) 漏洞发生在应用程序解析 XML 输入时&#xff0c;没有禁止外部实体的加载。 简单的理解&#xff0c;一个实体就是一个变量&#xff0c;可以在文档中的其他位置引用该变量。 实体主要分为四种&#xff1a; 内置实体 (Built-in entities…

Linq之Expression高级篇(常用表达式类型)

目录 写在前面 系列文章 变量表达式 常量表达式 条件表达式 赋值表达式 二元运算符表达式 一元运算符表达式 循环表达式 块表达式 总结 写在前面 首先回顾一下上篇文章的内容&#xff0c;上篇文章介绍了表达式树的解析和编译。如果忘记了&#xff0c;可以通过下面系列文章提供的…