VB.NET實(shí)現(xiàn)的MD5加密算法示例【32位】
本文實(shí)例講述了VB.NET實(shí)現(xiàn)的MD5加密算法。分享給大家供大家參考,具體如下:
Function MD5F(ByVal tempstr As String, ByVal w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer) MD5F = BigMod32Add(RotLeft(BigMod32Add(BigMod32Add(w, tempstr), BigMod32Add(Xin, qdata)), rots), X) End Function Sub MD5F1(ByRef w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer) Dim tempstr As String tempstr = BigOR(BigAND(X, y), BigAND(BigNOT(X), z)) w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots) End Sub Sub MD5F2(ByRef w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer) Dim tempstr As String tempstr = BigOR(BigAND(X, z), BigAND(y, BigNOT(z))) 'tempstr = BigXOR(y, BigAND(z, BigXOR(X, y))) w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots) End Sub Sub MD5F3(ByRef w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer) Dim tempstr As String tempstr = BigXOR(BigXOR(X, y), z) 'tempstr = BigXOR(X, BigXOR(y, z)) w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots) End Sub Sub MD5F4(ByRef w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer) Dim tempstr As String tempstr = BigXOR(y, BigOR(X, BigNOT(z))) w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots) End Sub Function MD5_Calc(ByVal hashthis As String) As String Dim buf(4) As String Dim Xin(16) As String Dim tempnum As Integer, tempnum2 As Integer, loopit As Integer, loopouter As Integer, loopinner As Integer Dim a As String, b As String, c As String, d As String, tempstr99 As String tempnum = 8 * Len(hashthis) hashthis = hashthis + Chr(128) 'Add binary 10000000 tempnum2 = 56 - Len(hashthis) Mod 64 If tempnum2 < 0 Then tempnum2 = 64 + tempnum2 End If 'hashthis = hashthis + String(tempnum2, Chr(0)) For loopit = 1 To tempnum2 hashthis = hashthis + Chr(0) Next loopit For loopit = 1 To 8 hashthis = hashthis + Chr(tempnum Mod 256) tempnum = tempnum - tempnum Mod 256 tempnum = tempnum / 256 Next loopit buf(0) = "67452301" buf(1) = "efcdab89" buf(2) = "98badcfe" buf(3) = "10325476" For loopouter = 0 To (Len(hashthis) / 64 - 1) a = buf(0) b = buf(1) c = buf(2) d = buf(3) ' Get the 512 bits For loopit = 0 To 15 Xin(loopit) = "" For loopinner = 1 To 4 'tempstr99 = Hex$(Asc(Mid$(hashthis, 64 * loopouter + 4 * loopit + loopinner, 1))) 'If Len(tempstr99) < 2 Then tempstr99 = "0" + tempstr99 'Xin(loopit) = Xin(loopit) + tempstr99 Xin(loopit) = Hex$(Asc(Mid$(hashthis, 64 * loopouter + 4 * loopit + loopinner, 1))) + Xin(loopit) If Len(Xin(loopit)) Mod 2 Then Xin(loopit) = "0" + Xin(loopit) Next loopinner Next loopit ' 第一輪循環(huán) MD5F1(a, b, c, d, Xin(0), "d76aa478", 7) MD5F1(d, a, b, c, Xin(1), "e8c7b756", 12) MD5F1(c, d, a, b, Xin(2), "242070db", 17) MD5F1(b, c, d, a, Xin(3), "c1bdceee", 22) MD5F1(a, b, c, d, Xin(4), "f57c0faf", 7) MD5F1(d, a, b, c, Xin(5), "4787c62a", 12) MD5F1(c, d, a, b, Xin(6), "a8304613", 17) MD5F1(b, c, d, a, Xin(7), "fd469501", 22) MD5F1(a, b, c, d, Xin(8), "698098d8", 7) MD5F1(d, a, b, c, Xin(9), "8b44f7af", 12) MD5F1(c, d, a, b, Xin(10), "ffff5bb1", 17) MD5F1(b, c, d, a, Xin(11), "895cd7be", 22) MD5F1(a, b, c, d, Xin(12), "6b901122", 7) MD5F1(d, a, b, c, Xin(13), "fd987193", 12) MD5F1(c, d, a, b, Xin(14), "a679438e", 17) MD5F1(b, c, d, a, Xin(15), "49b40821", 22) ' 第二輪循環(huán) MD5F2(a, b, c, d, Xin(1), "f61e2562", 5) MD5F2(d, a, b, c, Xin(6), "c040b340", 9) MD5F2(c, d, a, b, Xin(11), "265e5a51", 14) MD5F2(b, c, d, a, Xin(0), "e9b6c7aa", 20) MD5F2(a, b, c, d, Xin(5), "d62f105d", 5) MD5F2(d, a, b, c, Xin(10), "02441453", 9) MD5F2(c, d, a, b, Xin(15), "d8a1e681", 14) MD5F2(b, c, d, a, Xin(4), "e7d3fbc8", 20) MD5F2(a, b, c, d, Xin(9), "21e1cde6", 5) MD5F2(d, a, b, c, Xin(14), "c33707d6", 9) MD5F2(c, d, a, b, Xin(3), "f4d50d87", 14) MD5F2(b, c, d, a, Xin(8), "455a14ed", 20) MD5F2(a, b, c, d, Xin(13), "a9e3e905", 5) MD5F2(d, a, b, c, Xin(2), "fcefa3f8", 9) MD5F2(c, d, a, b, Xin(7), "676f02d9", 14) MD5F2(b, c, d, a, Xin(12), "8d2a4c8a", 20) ' 第三輪循環(huán) MD5F3(a, b, c, d, Xin(5), "fffa3942", 4) MD5F3(d, a, b, c, Xin(8), "8771f681", 11) MD5F3(c, d, a, b, Xin(11), "6d9d6122", 16) MD5F3(b, c, d, a, Xin(14), "fde5380c", 23) MD5F3(a, b, c, d, Xin(1), "a4beea44", 4) MD5F3(d, a, b, c, Xin(4), "4bdecfa9", 11) MD5F3(c, d, a, b, Xin(7), "f6bb4b60", 16) MD5F3(b, c, d, a, Xin(10), "bebfbc70", 23) MD5F3(a, b, c, d, Xin(13), "289b7ec6", 4) MD5F3(d, a, b, c, Xin(0), "eaa127fa", 11) MD5F3(c, d, a, b, Xin(3), "d4ef3085", 16) MD5F3(b, c, d, a, Xin(6), "04881d05", 23) MD5F3(a, b, c, d, Xin(9), "d9d4d039", 4) MD5F3(d, a, b, c, Xin(12), "e6db99e5", 11) MD5F3(c, d, a, b, Xin(15), "1fa27cf8", 16) MD5F3(b, c, d, a, Xin(2), "c4ac5665", 23) ' 第四輪循環(huán) MD5F4(a, b, c, d, Xin(0), "f4292244", 6) MD5F4(d, a, b, c, Xin(7), "432aff97", 10) MD5F4(c, d, a, b, Xin(14), "ab9423a7", 15) MD5F4(b, c, d, a, Xin(5), "fc93a039", 21) MD5F4(a, b, c, d, Xin(12), "655b59c3", 6) MD5F4(d, a, b, c, Xin(3), "8f0ccc92", 10) MD5F4(c, d, a, b, Xin(10), "ffeff47d", 15) MD5F4(b, c, d, a, Xin(1), "85845dd1", 21) MD5F4(a, b, c, d, Xin(8), "6fa87e4f", 6) MD5F4(d, a, b, c, Xin(15), "fe2ce6e0", 10) MD5F4(c, d, a, b, Xin(6), "a3014314", 15) MD5F4(b, c, d, a, Xin(13), "4e0811a1", 21) MD5F4(a, b, c, d, Xin(4), "f7537e82", 6) MD5F4(d, a, b, c, Xin(11), "bd3af235", 10) MD5F4(c, d, a, b, Xin(2), "2ad7d2bb", 15) MD5F4(b, c, d, a, Xin(9), "eb86d391", 21) buf(0) = BigAdd(buf(0), a) buf(1) = BigAdd(buf(1), b) buf(2) = BigAdd(buf(2), c) buf(3) = BigAdd(buf(3), d) Next loopouter hashthis = "" For loopit = 0 To 3 For loopinner = 3 To 0 Step -1 hashthis = hashthis + Mid(buf(loopit), 1 + 2 * loopinner, 2) Next loopinner Next loopit MD5_Calc = hashthis End Function Function BigMod32Add(ByVal value1 As String, ByVal value2 As String) As String BigMod32Add = Right$(BigAdd(value1, value2), 8) End Function Public Function BigAdd(ByVal value1 As String, ByVal value2 As String) As String Dim valueans As String Dim loopit As Integer, tempnum As Integer tempnum = Len(value1) - Len(value2) If tempnum < 0 Then value1 = Space$(Math.Abs(tempnum)) + value1 ElseIf tempnum > 0 Then value2 = Space$(Math.Abs(tempnum)) + value2 End If tempnum = 0 For loopit = Len(value1) To 1 Step -1 tempnum = tempnum + Val("&H" + Mid$(value1, loopit, 1)) + Val("&H" + Mid$(value2, loopit, 1)) valueans = Hex$(tempnum Mod 16) + valueans tempnum = Int(tempnum / 16) Next loopit If tempnum <> 0 Then valueans = Hex$(tempnum) + valueans End If BigAdd = Right(valueans, 8) End Function Public Function RotLeft(ByVal value1 As String, ByVal rots As Integer) As String Dim tempstr As String Dim loopit As Integer, loopinner As Integer Dim tempnum As Integer rots = rots Mod 32 If rots = 0 Then RotLeft = value1 Exit Function End If value1 = Right$(value1, 8) 'tempstr = String$(8 - Len(value1), "0") + value1 For loopit = 1 To 8 - Len(value1) tempstr = tempstr + "0" Next loopit tempstr = tempstr + value1 value1 = "" ' 轉(zhuǎn)換成二進(jìn)制形式 For loopit = 1 To 8 tempnum = Val("&H" + Mid$(tempstr, loopit, 1)) For loopinner = 3 To 0 Step -1 If tempnum And 2 ^ loopinner Then value1 = value1 + "1" Else value1 = value1 + "0" End If Next loopinner Next loopit tempstr = Mid$(value1, rots + 1) + Left$(value1, rots) ' 轉(zhuǎn)換為十六進(jìn)制 value1 = "" For loopit = 0 To 7 tempnum = 0 For loopinner = 0 To 3 If Val(Mid$(tempstr, 4 * loopit + loopinner + 1, 1)) Then tempnum = tempnum + 2 ^ (3 - loopinner) End If Next loopinner value1 = value1 + Hex$(tempnum) Next loopit RotLeft = Right(value1, 8) End Function Function BigAND(ByVal value1 As String, ByVal value2 As String) As String Dim valueans As String Dim loopit As Integer, tempnum As Integer tempnum = Len(value1) - Len(value2) If tempnum < 0 Then value2 = Mid$(value2, Math.Abs(tempnum) + 1) ElseIf tempnum > 0 Then value1 = Mid$(value1, tempnum + 1) End If For loopit = 1 To Len(value1) valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) And Val("&H" + Mid$(value2, loopit, 1))) Next loopit BigAND = valueans End Function Function BigNOT(ByVal value1 As String) As String Dim valueans As String Dim loopit As Integer Dim tempstr As String value1 = Right$(value1, 8) 'value1 = String$(8 - Len(value1), "0") + value1 For loopit = 1 To 8 - Len(value1) tempstr = tempstr + "0" Next loopit tempstr = tempstr + value1 value1 = tempstr For loopit = 1 To 8 valueans = valueans + Hex$(15 Xor Val("&H" + Mid$(value1, loopit, 1))) Next loopit BigNOT = valueans End Function Function BigOR(ByVal value1 As String, ByVal value2 As String) As String Dim valueans As String Dim loopit As Integer, tempnum As Integer tempnum = Len(value1) - Len(value2) If tempnum < 0 Then valueans = Left$(value2, Math.Abs(tempnum)) value2 = Mid$(value2, Math.Abs(tempnum) + 1) ElseIf tempnum > 0 Then valueans = Left$(value1, Math.Abs(tempnum)) value1 = Mid$(value1, tempnum + 1) End If For loopit = 1 To Len(value1) valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) Or Val("&H" + Mid$(value2, loopit, 1))) Next loopit BigOR = valueans End Function Function BigXOR(ByVal value1 As String, ByVal value2 As String) As String Dim valueans As String Dim loopit As Integer, tempnum As Integer tempnum = Len(value1) - Len(value2) If tempnum < 0 Then valueans = Left$(value2, Math.Abs(tempnum)) value2 = Mid$(value2, Math.Abs(tempnum) + 1) ElseIf tempnum > 0 Then valueans = Left$(value1, Math.Abs(tempnum)) value1 = Mid$(value1, tempnum + 1) End If For loopit = 1 To Len(value1) valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) Xor Val("&H" + Mid$(value2, loopit, 1))) Next loopit BigXOR = Right(valueans, 8) End Function
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
迅雷、快車、旋風(fēng)URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述對(duì)大家VB.NET程序設(shè)計(jì)有所幫助。
- ASP.NET中DES加密與解密MD5加密幫助類的實(shí)現(xiàn)代碼
- .NET MD5加密解密代碼解析
- asp.net實(shí)現(xiàn)的MD5加密和DES加解密算法類完整示例
- asp.net實(shí)現(xiàn)md5加密
- vb 中的MD5加密在asp.net中的實(shí)現(xiàn)
- asp.net中使用cookie與md5加密實(shí)現(xiàn)記住密碼功能的實(shí)現(xiàn)代碼
- ASP.NET中MD5與SHA1加密的幾種方法
- 徹底解決ASP.NET MD5加密中文結(jié)果和ASP不一致的問題
- asp.net下常用的加密算法MD5、SHA-1應(yīng)用代碼
- asp.net中MD5 16位和32位加密函數(shù)
- ASP.net中md5加密碼的方法
- .net core使用MD5加密解密字符串
相關(guān)文章
VB實(shí)現(xiàn)的遞歸復(fù)制文件和搜索文件的代碼分享
這篇文章主要介紹了VB實(shí)現(xiàn)的遞歸復(fù)制文件和搜索文件的代碼分享,代碼寫的比較簡(jiǎn)單,容易看懂,需要的朋友可以參考下2014-07-07VB.NET實(shí)現(xiàn)驗(yàn)證信用卡卡號(hào)
這篇文章主要介紹了VB.NET實(shí)現(xiàn)驗(yàn)證信用卡卡號(hào)是否正確的代碼,主要根據(jù)luhn算法來驗(yàn)證,有需要的小伙伴可以參考下。2015-05-05VB.NET實(shí)現(xiàn)的MD5加密算法示例【32位】
這篇文章主要介紹了VB.NET實(shí)現(xiàn)的MD5加密算法,結(jié)合具體實(shí)例形式分析了VB.NET實(shí)現(xiàn)的md5加密算法相關(guān)操作步驟與加密處理技巧,需要的朋友可以參考下2017-03-03VB.NET中使用種子填充算法實(shí)現(xiàn)給圖片著色的例子
這篇文章主要介紹了VB.NET中使用種子填充算法實(shí)現(xiàn)給圖片著色的例子,在開發(fā)一個(gè)畫圖工具時(shí)遇到的問題,需要的朋友可以參考下2014-07-07