当前位置: 代码迷 >> SQL >> SQLServer中的MD5加密兑现方法——区分32位和16位加密
  详细解决方案

SQLServer中的MD5加密兑现方法——区分32位和16位加密

热度:98   发布时间:2016-05-05 14:36:34.0
SQLServer中的MD5加密实现方法——区分32位和16位加密

?

CREATE FUNCTION dbo.MD5_II(@a INT,@b INT,@c INT,@d INT,@x INT,@s INT,@ac INT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)ENDGO CREATE FUNCTION dbo.MD5_HH(@a INT,@b INT,@c INT,@d INT,@x INT,@s INT,@ac INT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)ENDGO   CREATE FUNCTION dbo.MD5_GG(@a INT,@b INT,@c INT,@d INT,@x INT,@s INT,@ac INT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)ENDGO  CREATE FUNCTION dbo.MD5_FF(@a INT,@b INT,@c INT,@d INT,@x INT,@s INT,@ac INT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)ENDGO  CREATE FUNCTION dbo.MD5_I(@x INT,@y INT,@z INT)RETURNS INTWITH ENCRYPTIONASBEGIN  RETURN(@y ^ (@x | ([email protected])))ENDGO  CREATE FUNCTION dbo.MD5_H(@x INT,@y INT,@z INT)RETURNS INTWITH ENCRYPTIONASBEGIN  RETURN(@x ^ @y ^ @z)ENDGO  CREATE FUNCTION dbo.MD5_G(@x INT,@y INT,@z INT)RETURNS INTWITH ENCRYPTIONASBEGIN  RETURN((@x & @z) | (@y & ([email protected])))ENDGO  CREATE FUNCTION dbo.MD5_F(@x INT,@y INT,@z INT)RETURNS INTWITH ENCRYPTIONASBEGIN  RETURN((@x & @y) | (([email protected]) & @z))ENDGO CREATE FUNCTION dbo.MD5_AddUnsigned(@iX INT,@iY INT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)))ENDGO  CREATE FUNCTION dbo.MD5_RotateLeft(@iValue INT,@iShiftBits TINYINT)RETURNS INTWITH ENCRYPTIONASBEGIN  RETURN(dbo.MD5_LShift(@iValue, @iShiftBits) | dbo.MD5_RShift(@iValue, (32 - @iShiftBits)))ENDGO  CREATE FUNCTION dbo.MD5_RShift(@iValue INT ,@iShiftBits TINYINT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)))ENDGO CREATE FUNCTION dbo.MD5_LShift(@iValue INT,@iShiftBits TINYINT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)))ENDGO  CREATE FUNCTION dbo.MD5_m_2Power(@i TINYINT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)ENDGO  CREATE FUNCTION dbo.MD5_m_OnBits(@i TINYINT)RETURNS INTWITH ENCRYPTIONASBEGIN  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)ENDGO CREATE FUNCTION dbo.MD5_ConvertToWordArray( @sOrigMess VARCHAR(8000)='')RETURNS @tWordArray TABLE([ID] INT IDENTITY(0,1),[Word] INT)WITH ENCRYPTIONASBEGIN    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   RETURNENDGO CREATE FUNCTION dbo.MD5_WordToHex( @iValue INT)RETURNS CHAR(8)WITH ENCRYPTIONASBEGIN  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)ENDGO  CREATE FUNCTION dbo.MD5(@sOrigMess NVARCHAR(4000),@lenValue INT) RETURNS CHAR(32)WITH ENCRYPTIONASBEGIN--====================================  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 @lenValue = 32     SET @sRes = dbo.MD5_WordToHex(@a) + dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c) + dbo.MD5_WordToHex(@d)    ELSE     BEGIN      SET @sRes = dbo.MD5_WordToHex(@b) + dbo.MD5_WordToHex(@c)     END     SET @sRes = LOWER(@sRes)    RETURN(@sRes)ENDGO--执行函数--生成MD5PRINT dbo.MD5('1987',16)--生成6位随机数PRINT cast(rand()*999999+100000 AS int)--生成6位加密MD5密码 PRINT dbo.MD5(cast(rand()*999999+100000 AS int),16)  

?★大家请注意代码的末尾,那里有一个IF语句对MD5加密实现32位加密与16位加密进行了判断。

好多初学者可能不知道怎么使用或者有高手搞不懂为什么分32位和16加密,其实也没有很复杂,就是因为有很多客户的MD5加密用的是16位,为了与以前的程序保持同步所以进行了判断。

?

????具体怎么使用我想就不用说了吧!这个很简单了!我在项目中是应用到触发器中的。见下图:

16位加密代码示例

32位加密代码示例

????大家请注意我的密码是随机产生的。

  相关解决方案