亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
        當(dāng)前位置:編程開發(fā) > DotNET > VB.Net > 文章內(nèi)容
        

      VB.NET實(shí)現(xiàn)的MD5加密算法示例【32位】

       [ 2017年8月7日 ] 【

      本文實(shí)例講述了VB.NET實(shí)現(xiàn)的MD5加密算法。分享給大家供大家參考,具體如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      135
      136
      137
      138
      139
      140
      141
      142
      143
      144
      145
      146
      147
      148
      149
      150
      151
      152
      153
      154
      155
      156
      157
      158
      159
      160
      161
      162
      163
      164
      165
      166
      167
      168
      169
      170
      171
      172
      173
      174
      175
      176
      177
      178
      179
      180
      181
      182
      183
      184
      185
      186
      187
      188
      189
      190
      191
      192
      193
      194
      195
      196
      197
      198
      199
      200
      201
      202
      203
      204
      205
      206
      207
      208
      209
      210
      211
      212
      213
      214
      215
      216
      217
      218
      219
      220
      221
      222
      223
      224
      225
      226
      227
      228
      229
      230
      231
      232
      233
      234
      235
      236
      237
      238
      239
      240
      241
      242
      243
      244
      245
      246
      247
      248
      249
      250
      251
      252
      253
      254
      255
      256
      257
      258
      259
      260
      261
      262
      263
      264
      265
      266
      267
      268
      269
      270
      271
      272
      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
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved