动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章

 MD5算法的T-SQL实现(FOR SQL2000)(一)

作者:Rambo Qian 来源:开发者俱乐部 
阅读 数 80 人次 , 2003-8-20 10:24:00 

/***************************************************************************** * Name: T-SQL MD5算法实现 * 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'TF')) DROP FUNCTION [dbo].[MD5_m_OnBits] GO /***************************************************************************** * Name: MD5_m_OnBits * Description: 常数组 *****************************************************************************/ 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 -- 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) 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'TF')) DROP FUNCTION [dbo].[MD5_m_2Power] GO /***************************************************************************** * Name: MD5_m_2Power * Description: 常数组 *****************************************************************************/ 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 -- 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) 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 & 0x00000000FFFFFFFF 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'TF')) 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 & 0x00000000FFFFFFFF 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'TF')) 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'TF')) DROP FUNCTION [dbo].[MD5_AddUnsigned] GO /***************************************************************************** * Name: MD5_AddUnsigned * Description: MD5_AddUnsigned *****************************************************************************/ CREATE FUNCTION dbo.MD5_AddUnsigned( @iX INT ,@iY 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 & 0x00000000FFFFFFFF 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'TF')) 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(@y ^ (@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'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 ,@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'TF')) 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'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 INT ) 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 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  
 本文Tags数据库  算法  md5  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:MD5算法的T-SQL实现(FOR SQL2000)(二)
· 下一篇:存储过程替换text,ntext列中的字符串
· 删除全文索引
· Sybase数据库技术(80)
· Oracle数据库技术(38)
· SQL Server 2000之日志传送功能 - 描述(1)
· Access2003开发者扩展工具集概述(图)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077