/ ************************************************** *****************************
* Name: T-SQL MD5 algorithm implementation
*********************************************************** *********************************** /
Go
If EXISTS (Select * from dbo.sysObjects where id = Object_id (n '[dbo]. [MD5_M_ONBITS]') and xtype in (n'fn ', n'if ", n't')))
Drop function [dbo]. [MD5_M_ONBITS]
Go
/ ************************************************** *****************************
* Name: MD5_M_ONBITS
* DESCRIPTION: constant group
*********************************************************** *********************************** /
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 - 000000000000000000001111
WHEN 2 THEN 7 - 00000000000000000000000000000111
When 3 Then 15- 00000000000000000000000000000000000000000000000000000000001111
WHEN 4 THEN 31 - 00000000000000000000000000011111
When 5 Then 63 - 000000000000000000000000000000000000000000000000000000000000000000000000111111
WHEN 6 THEN 127 - 00000000000000000000000001111111
When 7 Then 255 - 000000000000000000000000000011111111
When 8 Then 511 - 00000000000000000000000000000000000000001111111111
When 9 Ten 1023 - 000000000000000000000000000000001111111111
When 10 Then 2047- 0000000000000000000000000000000000000000000081111111111
When 11 Then 4095 - 00000000000000000000000000111111111111
12im 8191 - 00000000000000000000000000000000000000000000000000000000000080000000000000000000000000000800000000000000000000800000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000008000000000000800000000000000008000000000000800000000000000000000000000000000000000000000000000000000000, 08111111111111
When 13 Ten 16383- 000000000000000000000011111111111111
When 14 death 32767- 0000000000000000000000, 08000000002111111111111111111111111
When 15 Then 65535- 000000000000000000000011111111111111
191 131071 - 00000000000000101111111111111111111111
191 262143 - 00000000000011111111111111111111111111111111 - 0000000000001011111111111111111111
19 death 1048575- @0000000000111111111111111111111111111111111111
When 20 dam 2097151 - 00000000001011111111111111111111
1211 4194303 - 00000000001111111111111111111111
121 8388607- 000000000111111111111111111111
When 23 Then 16777215- 00000000001111111111111111111111111111
When 24 Then 33554431 - 000000011111111111111111111111111111111
When 25 the 67108863 - 00000011111111111111111111111111
When 261 134217727 - 0000011111111111111111111111111
When 27 Then 268435455 - 0000111111111111111111111111111
121 536870911 - 00011111111111111111111
1291 1073741823 - 00111111111111111111111111111111
When 30 Ten 2147483647 - 011111111111111111111
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't'))
Drop Function [dbo]. [MD5_M_2POWER]
Go
/ ************************************************** *****************************
* Name: MD5_M_2POWER
* DESCRIPTION: constant group
*********************************************************** *********************************** /
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 - 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010
WHEN 2 THEN 4 - 00000000000000000000000000000100
When 3 Then 8 - 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 million
When 4 Then 16- 000000000000000000-00
WHEN 5 THEN 32 - 00000000000000000000000000100000WHEN 6 THEN 64 - 00000000000000000000000001000000
When 7 Then 128- 0000000000000000002002
WHEN 8 THEN 256 - 00000000000000000000000100000000
When 9 Then 512 - 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 million
When 10 Then 1024- 000000000000000000-00
When 11 Then 2048- 00000000000000000000-00
When 12 Then 4096- 000000000000000000-00
When 13 Then 8192 - 000000000000000000000000000002
When 14 Then 16384- 0000000000000000-00
14 death 32768- 00000000000000000000000000000000000000000000000000000000002
19 Then 65536- 0000000000000000-00
131 131072- 00000000000000000000000000000000000000000000000000000000000000000000000000000000
191 262144- 0000000000000100000000000000200
19 death 524288- 000000000000000000000000000
When 20 Then 1048576- 0000000000010000000000002
When 21 Then 2097152 - 000000000000000000000000000000000
When 22 Then 4194304- 00000000010000000000002
When 23 treen 8388608 - 00000000100000000000000000000000
When 24 Then 16777216- @ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002
121 33554432 - 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020
When 26 Then 67108864- 00000100000000000000-00
127 Then 134217728- 0000000000000000002
121 268435456 - 0001000000000000000000000000-008
1991 536870912 - 001000000000000000000-008
WHEN 30 THEN 1073741824 - 010000000000000000200
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 & 0x00000000FFFFFFF 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't ')))
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 & 0x00000000FFFFFFF 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't ')))
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't')))
DROP FUNCTION [DBO]. [MD5_ADDUNSIGNED]
Go
/ ************************************************** *****************************
* Name: MD5_ADDUNSIGNED
* Description: MD5_ADDUNSIGNED
*********************************************************** *********************************** /
Create function dbo.md5_addunsigned
@IX INT
@ ≤ 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 & 0x00000000FFFFFFF 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't ')))
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 (@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't')))
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't')))
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't ')))
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_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