作者MOONRAKER (㊣以为嘴硬就没事吗?)
看板Visual_Basic
标题Re: [VB6 ] [分享]如何使用MD5编码
时间Fri May 8 03:04:05 2009
※ 引述《jimpop (popmij)》之铭言:
: 最近在写有关帐号密码的登入程式
: 发现最常见的编码 MD5 竟然在VB 2005 里找不到~~~
: 而且网路上(除了微软)竟然也没有资料!!!?????
阿我用"VB.NET md5"就找到一堆
资料根本是满地爬 中文英文简体正体都有 看都看不完 请问你是找到哪个星球去了
在哪里找到的也拜托描述清楚一点
这是MSDN,不是什麽随便的参考站还是讨论区,不要只给个短网址。
你从MSDN找到的网页是 System.Security.Cryptography 的 MD5 class
他那麽多范例程式,重点只有以下这样
Imports System
Imports System.Security.Cryptography
Imports System.Text
Function getMd5Hash(ByVal input As String) As String
' 宣告MD5物件
Dim md5Hasher As MD5 = MD5.Create()
' 把输入字串input依照系统预设编码(往往指Big5)转成byte阵列。
' 注意你如果选择不同的编码转出来的byte阵列绝不相同。
' 阵列接着再送给MD5物件算hash,存在data这个byte阵列里面
Dim data As Byte() = _
md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))
' 读取data内的各个byte,把每个byte转成16进位(ToString("x2"))
' 然後用一个stringBuilder(sBuilder)串接成字串
Dim sBuilder As New StringBuilder()
Dim i As Integer
For i = 0 To data.Length - 1
sBuilder.Append(data(i).ToString("x2"))
Next i
' 取出sBuilder中的字串,传回去
Return sBuilder.ToString()
End Function
只要在你的module里面自己写一次这个函数,根本就不用再新建专案。
看懂这个函数以後另外那个verifyMD5hash() 就没有任何特别的:你要检查
这段文字的hash对不对,当然就是用这段文字再产生一个hash,然後看两者
有没有一样而已。他还用一个comparer,也未必就要这样做,也可以把hash
输入用,tolower()全部转成小写再用 = 比对。除非speed is the key,或
者你很计较多一个字串的储存空间。你也可以看到string.ToLower() is evil
这种文章,但是这种深奥的东东以後再看就好了。
也有一些范例的用法不同,例如这一个,来自「蓝色小铺」:
http://tinyurl.com/cj4tbk
Protected Function ComputeMd5(ByVal filePath As String) As String
Dim CurrentFileStream As FileStream = File.OpenRead(filePath) '(1)
Dim CryptoMd5 As New MD5CryptoServiceProvider() '(2)
Dim EncryptHashCode As Byte() = _
CryptoMd5.ComputeHash(CurrentFileStream) '(3)
Dim Result As String = New String("")
For ByteIndex As Integer = 0 To EncryptHashCode.Length - 1
Result += EncryptHashCode(ByteIndex).ToString("x2") '(4)
Next
Return Result
End Function
这个的差别在
(2)(3): 使用 MD5CryptoServiceProvider(),而不直接使用MD5。但是这
两者在使用上几乎没有差别。
(1): 直接打开档案计算整个档案的hash。注意他并不读取档案成字串再hash;
同一页上的问题就是先读成字串然後再hash,结果300MB左右就当了。
他这只开档开成filestream,这样就是任何档案都可以hash,也不用
烦恼字码转换。
(4)他用传统的 + 号接字串,不用stringBuilder。这当然是一个坏习惯,
所以你可以改掉它。
他也是写成一个函数,或方法-所以只要在你的class里面写一次就好。当然该
import的还是要import,参照前面。
--
Google 关键字 : MPFC-TCP / 杀人笑话 / 包租婆也有过当罗莉的时候
Youtube关键字 : 脱衫脱裤 / 傻蛋奥运 / 宗教审讯 / 买张床 / 单车超人 / 讴歌金钱
*美发师登山队 http://tinyurl.com/dm6lh3 *Ypres 1914 http://tinyurl.com/b432jb
[蒙帝派松正体中文计画] https://www.youtube.com/user/JamesBondXD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.232.100.235
1F:推 jimpop:因为我是使用 VB 2005 MD5 去找~资料并没有满地爬这麽恐怖 05/08 10:43
2F:→ jimpop:msdn~说真的对新手会有点难度吧!? 05/08 10:44
3F:→ jimpop:会把它贴出来~除了分享外~也提供以後的新手做索引搜寻 05/08 10:45
4F:→ jimpop:当然还是要谢谢你这篇文章~~让我又长知识 05/08 10:45
5F:推 Peruheru:第一次看MSDN谁都是新手,但是就是新手学着看才懂更多XD 05/08 10:52
6F:→ Peruheru:我也是最近才开始会去看MSDN.... 05/08 10:53
7F:嘘 Privator:上次说人家新手病, 这次是找到哪个星期去了, 修养还真好. 05/10 15:23