作者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
[蒙帝派松正體中文計畫] http://www.youtube.com/user/JamesBondXD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.100.235
推 jimpop:因為我是使用 VB 2005 MD5 去找~資料並沒有滿地爬這麼恐怖 05/08 10:43
→ jimpop:msdn~說真的對新手會有點難度吧!? 05/08 10:44
→ jimpop:會把它貼出來~除了分享外~也提供以後的新手做索引搜尋 05/08 10:45
→ jimpop:當然還是要謝謝你這篇文章~~讓我又長知識 05/08 10:45
推 Peruheru:第一次看MSDN誰都是新手,但是就是新手學著看才懂更多XD 05/08 10:52
→ Peruheru:我也是最近才開始會去看MSDN.... 05/08 10:53
噓 Privator:上次說人家新手病, 這次是找到哪個星期去了, 修養還真好. 05/10 15:23