当前位置: 首页 > 图文教程 > 网络编程 > ASP > 关于ASP,ASP.NET,VB.NET里的MD5加密函数

ASP
asp分页(自己整理的2个分页程序)
ASP常用的系统配置函数
雨哲防采集策略之列表篇
雨哲浅谈关于防采集而不影响收录内容篇
asp数据库连接函数
ajax XMLHTTP Post Form时的表单乱码综合解决
ASP注入详细命令40条
用ASP实现MSSQL用户密码破解
ASP创建对象的两种方法比较
ASP字符串转换为整形、双精度型、布尔
ASP计算str2在str1中出现的次数
asp采集抓取网上房产信息的代码
ASP注册登陆实例代码
ASP中使用FileSystemObject时提高性能的方法
分享一个好东东,动态Include文件 (Dynamic File Includes)
解决 JScript 中使用日期类型数据时出现类型错误的问题
在ASP里面创建GUID
在JScript中使用缓存技术的实际代码
ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验
海阳2006+功能中的潜水王

关于ASP,ASP.NET,VB.NET里的MD5加密函数


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 181 ::
收藏到网摘: n/a

   关于ASP,ASP.NET,VB.NET里的MD5加密函数 在ASP中,我们使用过如动网论坛等用的ASP中MD5函数加密出的字符串则如:
1165d25d8cd021d5

   而在Asp.Net中下面的方法: 代码
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,"MD5")进行MD5加密出来的结果却是:
12C403B91165D25D8CD021D5F9B5BB7F


   究其原因,是因为,在ASP中的MD5函数是使用了32位MD5 Hashvalue中的第9~25位再变小写作为密文。知道这个原因,把ASP.NET的结果稍加处理就可以用来比较老数据库中的密码字串了。
在ASP的MD5函数中第353、354行: 代码
´MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
MD5=LCase(WordToHex(b) & WordToHex(c)) ´I crop this to fit 16byte database password :D

第一句是取全部的32位密文,第二句则是取中间第9~25位为16位密文。

到了vb.net问题又来了,在vb.net里,无法用到System.Web.Security名称空间,无法用上面简单的办法进行MD5加密。故我写了下面这个函数来处理:

VB.NET: 代码´MD5 加密函数
Public Shared Function MD5(ByVal strSource As String, ByVal Code As Int16) As String
´这里用的是ascii编码密码原文,如果要用汉字做密码,可以用UnicodeEncoding,但会与ASP中的MD5函数不兼容
Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Dim i As Integer
Select Case Code
Case 16 ´选择16位字符的加密结果
For i = 4 To 11
MD5 += Hex(hashvalue(i)).ToLower
Next
Case 32 ´选择32位字符的加密结果
For i = 0 To 15
MD5 += Hex(hashvalue(i)).ToLower
Next
Case Else ´Code错误时,返回全部字符串,即32位字符
For i = 0 To hashvalue.Length - 1
MD5 += Hex(hashvalue(i)).ToLower
Next
End Select
End Function