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

xiaoxiao2021-03-06  82

/ ************************************************** *************************** * Name: T-SQL MD5 algorithm implementation * 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')) 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 - 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 - 00000000000000000111111111111111111111 65535 - 00000000000000001111111111111111111111111111111111111111111111111111111111111111111111111- 00000000000000001111111111 111111 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 214

7483647 - 01111111111111111111111111111111 ELSE 0 END RETURN (@iRes) END GOIF 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: constant group ************************************************************** *************************************************************************************************************** @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 - 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 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

- 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Else 0 End Return (@ires) End Goif 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 & 0x00000000FfffffffFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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')) 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 & 0x00000000ffffffffFFFFFFFFFFFFFFFF 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_ROTATEFT ********* *********************************************************** ****************** / 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 GoiF 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 (@i X int Bigint) Return (Cast (@IRES & 0x00000000FFFFFFFFFFFFFF 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't ')) DROP FUNCTION [DBO] G / ********************************************************************************************************************************************************************************************************************************************************** ********************************* * Name: MD5_F * DESCRIPTION: MD5_F ********* *********************************************************** ***************** / CREATE FUNCTION DBO.MD5_F (@x int, @ y int, @ z int) returin return ((@ x & @ @ @ @ @ @ @ @ @ @ x & @ Y) | (~ @ x) & @z)) End Goif 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')) DROP FUNCTION [DBO] [M *] GO / ************************************** ******************************** * NAME: MD5_H * Description: MD5_H ********* *********************************************************** ****************** / CREATE FUNCTION DBO.MD5_H (@X INT, @ Y Int, @ z int) returin 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')) DROP FUNCTION [DBO] [M / *] GO / ************************************************** ******************************** * Name: MD5_i * description: MD5_i ********* *********************************************************** ****************** / CREATE FUNCTION DBO.MD5_I (@X INT, @ y int, @ z int) returins int with encwtion as begin Return (@y ^ (@ X | (~ @ z))) End GoiF 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 Unsigned (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] [M *] 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 goif exists (select * from dbo.sysObjects where id = Object_id (n ' [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 intert) 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

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

New Post(0)