T-SQL implementation of MD5 algorithm (for SQL2000) (2)

xiaoxiao2021-03-06  84

IF exists (Select * from dbo.sysObjects where id = Object_id (n '[dbo]. [Md5_converttowordArray]') and xtype in (n'fn ', n'if ", n')) DROP FUNCTION [DBO] [MD5_CONVERTTOORDARRAY] GO / ************************************************************ ******************************** * Name: MD5_CONVERTTOWORDARRAY * DESCRIPTION: MD5_CONVERTTOWORDAY ********** *********************************************************** ****************** / 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] = @icountofwordupdate @twordArray set [word] = [word] | DBO.MD5_LSHIFT (@ ilenofmess, 3) Where [id] = @iwordaraylen - 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] [M /] 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 TEN 'C' WHEN 13 TEN 'D' WHEN 14 THEN 'E' WHEN 15 TEN 'F' ELSE 'END Case @itmp% 16 when 0 Then '0' When 1 Then '1' When 2 Then '2' When 3 Then '3' When 4 TEN '4' WHEN 5 THEN '5' WHEN 6 TEN '6' WHEN 7 THEN '7' When 8 Then '8' When 9 '9' When 10 Then 'a' When 11 Then 'b' When 12 Then 'c' When 13 TEN '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't ')) DROP FUNCTION [DBO] G / ********************************************************************************************************************************************************************************************************************************************************************************************** ******************************** * 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 TINYINTSELECT @ 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 INTDECLARE @ttmp table ([id] int, [word] int) Insert Into @ttmp select * from DBO.MD5_CONVERTTOWORDARRAY (@sorigmess) Select @ iWordArraycount = 0, @iwordArraylen = count (*) from @ttmp

While (@iwordArraycount <@iwordaraylen) 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] = @iwordaraycount 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] = @iwordaraycount 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, 0xfffff5bb1) 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 wherecount 12), @ S11, 0x6b901122) SELECT @d = dbo.md5_ff (@D, @a, @B, @c, (select [word] from @ttmp where [id] = @iwordaraycount 13), @ S12, 0xFD987193) SELECT @c = dbo.md5_ff (@B, @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] = @iwordaraycount 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] = @iwordaraycount 5), @ S31, 0xffa3942) 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] = @iwordaraycount 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 wherecount 7), @ s33, 0xf6bb4b60) SELECT @B = dbo.md5_hh (@B, @c, @d, @a, (select [word] from @ttmp where [id] = @iwordaraycount 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 wherecount 12), @ S32, 0xE6DB99E5) SELECT @c = dbo.md5_hh (@c, @d, @a, @B, (select [word] from @ttmp where [id] = @iwordaraycount 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] = @iwordaraycount 14), @ S43, 0xAb9423a7) SELECT @B = dbo.md5_ii (@B, @c, @d, @ A, (Select [word] from @ttmp where [id] = @iwordaraycount 5), @ S44, 0xFC93A039) SELECT @A = dbo.md5_ii (@A, @B, @c, @d, (Select [Word ] From @ttmp where [id] = @iwordArraycount 12), @ S41, 0x65559c3) SELECT @d = dbo.md5_ii (@D, @a, @B, @c, (select [word] from @ttmp where [ ID] @ iWordArraycount 3), @ s42, 0x8f0cc92) SELECT @c = dbo.md5_ii (@c, @d, @a, @B, (select [word] from @ttmp wherecount 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 wherecount 4), @ S41, 0xf7537e82) SELECT @d = dbo.md5_ii (@D, @a, @B, @C, (select [word] from @ttmp wherecount 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 ('I') AS 'MD5 (' I '' ')' Union SELECT 'A31D0F25367EBE046897F8A939CA4A9F'

转载请注明原文地址:https://www.9cbs.com/read-95115.html

New Post(0)