被广泛使用的MD5.asp中似乎存在缺陷

原创 2004年07月21日 08:28:00

大大小小的论坛  很多都是用asp写的(在我知道的范围内用DVBBS的似乎很多),而密码大都用md5加密后保存到数据库

问题就出在这个过程中使用的md5.asp里面

以下摘抄一些别处的问题

主题:.Net中用MD5函数加密“中文”时,与ASP中的MD5不一致问题
用户泡泡状态 作 者: probevb() 2004-07-18 20:32:43 赞成:0 反对:0 用户信息发送短信用户IP
[回复] [打包] [转贴]

请问如何在.Net中用MD5函数,在加密中文字串时,会出现与ASP中的MD5不一致的现
象。
例如:
在.Net中,加密:MD5("aaa")=47bce5c74f589f4867dbd57e9ca9f808
在ASP中,加密:MD5("aaa")=47bce5c74f589f4867dbd57e9ca9f808

结果相同

但如果是这样:

在.Net中,加密: MD5("您好")=F070AA69F8D73650DA15A0F9D0878A41
在ASP中,加密:MD5("您好")=06f491cd5d884a1baa2c65435353df06


我用的加密函数:

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("
您好", "MD5")


请指教,原因为何不同?如何使其.Net与原有ASP的MD5兼容?

 

不止.Net的MD5加密和md5.asp有出入,我用Delphi7的IndyMD5以及从各处搜索来的md5代码算出的都和.Net的md5加密结果一样,跟md5.asp不同...初步判断是md5.asp本身的缺陷
但是这个md5.asp都被使用了很长时间,数据库中留的也都是这样“错误”的加密结果,所以改md5.asp似乎不能很好地解决问题了...

  只能祈祷/警告用户不要使用中文密码?
  也许应该修改一下我们的原本正确的程序


猜测:既然只在处理中文的时候出问题,应该是和vbs的字符处理有关...
我在md5.asp里面找到了这样内容:

  Private Function ConvertToWordArray(sMessage)
    Dim lMessageLength
    Dim lNumberOfWords
    Dim lWordArray()
    Dim lBytePosition
    Dim lByteCount
    Dim lWordCount
   
    Const MODULUS_BITS = 512
    Const CONGRUENT_BITS = 448
   
    lMessageLength = Len(sMessage)
   
    lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD)
    ReDim lWordArray(lNumberOfWords - 1)
   
    lBytePosition = 0
    lByteCount = 0
    Do Until lByteCount >= lMessageLength
        lWordCount = lByteCount / BYTES_TO_A_WORD
        lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
        lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
        lByteCount = lByteCount + 1
    Loop

    lWordCount = lByteCount / BYTES_TO_A_WORD
    lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE

    lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)

    lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
    lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
   
    ConvertToWordArray = lWordArray
End Function


显然,上面黄色的部分使用了Mid函数,
  VBS中处理字符串的时候是变成Unicode后进行处理,这样无论英文  还是中文 一个字符都被看作两字节...而Mid则可以保证取得的是完整的字符

但是我们用的.Net或者Delphi程序中,md5加密似乎是把文本内容看作流(也许应该说它们在处理的实际上就是流),以字节为单位...
于是 我们算出的结果就和md5.asp有出入了......

我想如果和原有的数据保持兼容的话,我们只能再写一个和md5.asp一样有缺陷的程序了

Session的缺点总结及解决方法

Session有些局限制性,或者说是一些缺点吧。现在我们再来看看Session的缺点:   ①当mode="InProc"时,也就是默认设置时,容易丢失数据,为什么?因为网站会因为各种原因重启。   ...
  • MsdnWoo
  • MsdnWoo
  • 2016年06月02日 14:43
  • 1845

MD5和SHA-1的缺陷

上文介绍了MD5和SHA-1函数,我现在来讲一讲这两个函数作为消息摘要函数的安全上的缺陷是什么。...
  • shsalex
  • shsalex
  • 2016年08月26日 15:42
  • 2012

AsyncTask的缺陷和问题

在Android开发中,AsyncTask可以使得用户避免直接使用Thread类和Handler 来处理后台操作,适用于需要异步处理数据并将数据更新到界面上的情况。AsyncTask适用于后台操作只有...
  • goodlixueyong
  • goodlixueyong
  • 2015年05月21日 20:09
  • 17334

asp.net发送邮件,使用MD5加密解密,实现用户注册完成后发送流水号(账号)到对方邮箱,jeasyUI验证,combobox的使用完成 实例下载

最近项目用到用户注册后要发邮件
  • qq_18979049
  • qq_18979049
  • 2014年08月08日 11:24
  • 929

VS2013中ASP.NET使用MD5加密注意事项

最近在做简单的.NET网站时用到了MD5加密方法,发现之前一直用到的方法过时了,自己在网上找了半天才找到了相应的解决方法,我觉得有些东西还是蛮有必要记住的 这个是之前的版本的,但是在VS20...
  • weixin_36431280
  • weixin_36431280
  • 2016年11月22日 13:01
  • 338

0e开头MD5 python生成脚本 PHP哈希弱类型比较缺陷

MD5弱类型比较 在代码审计当中经常见到,所以写了一个python脚本,有事没事跑一下,积累一些字符串。 网上大多都是看到《0e开头MD5值小结》这篇文章,这里希望给大家一个可自定义字符的自动化脚本,...
  • KAlbertLee
  • KAlbertLee
  • 2017年04月17日 16:48
  • 1821

MD5和SHA-1的缺陷

上文介绍了MD5和SHA-1函数,我现在来讲一讲这两个函数作为消息摘要函数的安全上的缺陷是什么。...
  • shsalex
  • shsalex
  • 2016年08月26日 15:42
  • 2012

MD5和SHA-1的缺陷

简洁就是美。把问题说得简单、易懂是一种美德。 上文介绍了MD5和SHA-1函数,我现在来讲一讲这两个函数作为消息摘要函数的安全上的缺陷是什么。 一直到2005年,这两个函数...
  • M_mamba
  • M_mamba
  • 2017年11月27日 10:17
  • 72

ASP.NET中使用MD5和SHA1算法加密

  • 2014年02月14日 23:07
  • 23KB
  • 下载

asp.net发送邮件,使用MD5加密解密,实现用户注册完成后发送流水号(账号)到对方邮箱,jeasyUI验证,combobox的使用完成 实例下载

  • 2014年08月08日 14:48
  • 1.95MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:被广泛使用的MD5.asp中似乎存在缺陷
举报原因:
原因补充:

(最多只允许输入30个字)