Sql-MD5加密

SQL 中的MD5值加密
使用方法:把下面的所有代码拷到sql中运行.
调用方法: dbo.MD5('要加密的字符串')
还可以自定义几位的加密,方法:
在最后面的自定义函数 MD5 增加一个参数 @LenValue int
再把倒数几行的
SET @sRes = dbo.MD5_WordToHex(@a) + dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c) + dbo.MD5_WordToHex(@d) 
这句代码换成
IF @LenValue = 32
SET @sRes = dbo.MD5_WordToHex(@a) + dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c) + dbo.MD5_WordToHex(@d)
ELSE IF @LenValue=24
SET @sRes = dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c)
ELSE
SET @sRes = dbo.MD5_WordToHex(@b)
这样就可以根据需要获取 8 16 32位的加密了
调用方法:  
dbo.MD5('要加密的字符串',32) --三十二位加密
dbo.MD5('要加密的字符串',16) --十六位加密
dbo.MD5('要加密的字符串',8) --八位加密

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

  

posted @ 2011-12-08 18:09  xfyn  阅读(856)  评论(0编辑  收藏  举报