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

xiaoxiao2021-03-06  41

/ ************************************************** *****************************

* 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

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

New Post(0)