CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

☆☆☆网上流传的SQL MD5 算法对中文字符串不能产生正确的 MD5 码(修改方法)☆☆☆

楼主xthmpro_cn([可人])2006-12-21 11:23:39 在 MS-SQL Server / 基础类 提问

版权所有,转载请注明.  
  xthmpro_cn@sohu.com.cn(May   Flower   Software)  
   
  网上流传的SQL   MD5   算法经过检查,对中文字符串产生的   MD5   码,是不正确的。该算法的验证例子中的:  
  select   dbo.MD5('我')   as   'MD5(''我'')'  
  union  
  select   'a31d0f25367ebe046897f8a939ca4a9f'  
   
  但是,"我"   的正确的MD5码是:A92F38654F3A250602AF1E69A88699E3  
   
  经过检查是由于dbo.MD5_ConvertToWordArray函数对Unicode的处理有错误。改正后的函数如下:  
   
  SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   OFF    
  GO  
  /*****************************************************************************  
  *   Name:   MD5_ConvertToWordArray  
  *   Description:   MD5_ConvertToWordArray  
  *****************************************************************************/  
  ALTER         FUNCTION   dbo.MD5_ConvertToWordArray(  
        @sOrigMess   VARCHAR(8000)     =   ''  
  )  
  RETURNS   @tWordArray   TABLE([ID]   INT   IDENTITY(0,1),[Word]   INT)  
  AS  
  BEGIN  
      IF   @sOrigMess   IS   NULL  
          SET   @sOrigMess   =   ''  
       
      DECLARE   @bOrigMess   VARBINARY(8000)  
      SET   @bOrigMess   =   CONVERT(VARBINARY,   @sOrigMess)  
   
      DECLARE   @iLenOfMess             INT  
      DECLARE   @iWordArrayLen       INT  
      DECLARE   @iPosOfWord             INT  
      DECLARE   @iPosOfMess             INT  
      DECLARE   @iCountOfWord         INT  
   
      SET   @iLenOfMess   =   DATALENGTH(@bOrigMess)  
      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(@bOrigMess,   @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]   =   @iCountOfWord  
   
      UPDATE   @tWordArray  
          SET   [Word]   =   [Word]   |   dbo.MD5_LShift(@iLenOfMess,3)  
          WHERE   [ID]   =   @iWordArrayLen   -   2  
      UPDATE   @tWordArray  
          SET   [Word]   =   [Word]   |   dbo.MD5_RShift(@iLenOfMess,29)  
          WHERE   [ID]   =   @iWordArrayLen   -   1  
      RETURN  
  END  
  GO  
  SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   ON    
  GO 问题点数:100、回复次数:30Top

1 楼sdhylj(青锋-SS)(献血有益健康(别人的))回复于 2006-12-21 11:24:40 得分 4

1Top

2 楼jacobsan(梅)回复于 2006-12-21 11:25:30 得分 4

markTop

3 楼xthmpro_cn([可人])回复于 2006-12-21 11:27:40 得分 0

原来的算法网上到处都是:  
  http://tech.httpcn.com/show.asp?id=2712Top

4 楼jackie168(http://soft.eastrise.net)回复于 2006-12-21 11:31:54 得分 4

3Top

5 楼CloneCenter(复制中心)回复于 2006-12-21 11:32:54 得分 4

好的,来接分了。Top

6 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-12-21 11:35:44 得分 4

原来这样也可以的~  
  接分~Top

7 楼ccrun(老妖)(www.ccrun.com)回复于 2006-12-21 11:45:23 得分 4

原来这样也可以的~  
  接分~Top

8 楼xiaoku(野蛮人(^v^))回复于 2006-12-21 11:52:18 得分 4

接分。。。Top

9 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2006-12-21 12:00:37 得分 4

接分Top

10 楼qingshanyang(青山羊)回复于 2006-12-21 12:39:08 得分 4

接分.Top

11 楼cadenza7()回复于 2006-12-21 12:42:05 得分 4

MarkTop

12 楼CoolSlob()回复于 2006-12-21 13:06:07 得分 4

?   原来这样也可以的~  
  接分~    
  Top

13 楼CoolSlob()回复于 2006-12-21 13:06:28 得分 0

版权所有,转载请注明.  
  xthmpro_cn@sohu.com.cn(May   Flower   Software)Top

14 楼wozhuchuanwei(一个组件编写者,就一定是一个更优秀的Delphi开发者)回复于 2006-12-21 13:43:19 得分 4

Mark  
  以后要用的时候好找。Top

15 楼Blakhawk(黑鹰)回复于 2006-12-21 19:33:50 得分 4

牛人.收藏一下.备用Top

16 楼mengmou()mengmou()回复于 2006-12-21 19:37:36 得分 4

markTop

17 楼marco08(天道酬勤)回复于 2006-12-21 20:41:11 得分 4

学习Top

18 楼zhang_yzy(六子儿)回复于 2006-12-22 10:12:45 得分 4

收藏,  
   
  Top

19 楼itmingong(nous+wisdom+courage)回复于 2006-12-22 10:15:20 得分 4

用SQL处理MD5,牛Top

20 楼caixia615(*^_^*)‵My ɡīr!.ˊ想念妳ˋ 。(*^_^*)回复于 2006-12-22 10:35:45 得分 4

up,markTop

21 楼belllab(菜鸟)回复于 2006-12-22 11:41:43 得分 4

好东西,顶!Top

22 楼hy98521(斯达克)回复于 2006-12-22 11:42:29 得分 4

markTop

23 楼hy98521(斯达克)回复于 2006-12-22 11:42:35 得分 0

markTop

24 楼hy98521(斯达克)回复于 2006-12-22 11:42:42 得分 0

markTop

25 楼dreamw(网卡)回复于 2006-12-22 13:46:41 得分 4

有这样的事??顶起Top

26 楼feixiangVB(別以爲我不在乎!)回复于 2006-12-22 13:58:22 得分 4

收藏~~~`Top

27 楼fish_yht(百行孝为先,万业勤为径。)回复于 2006-12-22 14:10:54 得分 4

学习+收藏Top

28 楼crazyflower(小狂花,学习中……)回复于 2006-12-22 15:20:36 得分 4

markTop

29 楼spark_li(晕忽忽(恶人谷:通讯连长))回复于 2006-12-22 16:41:46 得分 4

markTop

30 楼cuixiping(无心●愚公)回复于 2007-04-18 19:07:25 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:xthmpro_cn
  • sdhylj
  • jacobsan
  • jackie168
  • CloneCenter
  • ly_liuyang
  • ccrun
  • xiaoku
  • comerliang
  • qingshanyang
  • cadenza7
  • CoolSlob
  • wozhuchuanwei
  • Blakhawk
  • mengmou
  • marco08
  • zhang_yzy
  • itmingong
  • caixia615
  • belllab
  • hy98521
  • dreamw
  • feixiangVB
  • fish_yht
  • crazyflower
  • spark_li

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo