關於ASP,ASP.NET,VB.NET裡的MD5加密函數

來源:互聯網
上載者:User
asp.net|函數|加密 在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



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.