这篇文章主要介绍了VB实现的16位和32位md5加密代码分享,需要的朋友可以参考下
这篇文章主要介绍了VB实现的16位和32位md5加密代码分享,需要的朋友可以参考下
这篇文章主要介绍了VB实现的16位和32位md5加密代码分享,需要的朋友可以参考下
在各种登陆系统中,用户密码的md5加密是不可少的。
这么说吧,即使你通过各种手段看到了用户的登陆密码,但那一串古古怪怪的东西你也不可能知道它是什么,这就是保护。
md5加密运算是不可逆的,就是说你不能通过那一串古古怪怪的东西算出它原始的样子。
下面是完整的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
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
Private Const BITS_TO_A_BYTE = 8Private Const BYTES_TO_A_WORD = 4Private Const BITS_TO_A_WORD = 32 Private m_lOnBits(30)Private m_l2Power(30) Private Function LShift(lValue, iShiftBits)If iShiftBits = 0 ThenLShift = lValueExit FunctionElseIf iShiftBits = 31 ThenIf lValue And 1 ThenLShift = &H80000000ElseLShift = 0End IfExit FunctionElseIf iShiftBits < 0 Or iShiftBits > 31 ThenErr.Raise 6End If If (lValue And m_l2Power(31 - iShiftBits)) ThenLShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000ElseLShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))End IfEnd Function Private Function RShift(lValue, iShiftBits)If iShiftBits = 0 ThenRShift = lValueExit FunctionElseIf iShiftBits = 31 ThenIf lValue And &H80000000 ThenRShift = 1ElseRShift = 0End IfExit FunctionElseIf iShiftBits < 0 Or iShiftBits > 31 ThenErr.Raise 6End If RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) If (lValue And &H80000000) ThenRShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))End IfEnd Function Private Function RotateLeft(lValue, iShiftBits)RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))End Function Private Function AddUnsigned(lX, lY)Dim lX4Dim lY4Dim lX8Dim lY8Dim lResult lX8 = lX And &H80000000lY8 = lY And &H80000000lX4 = lX And &H40000000lY4 = lY And &H40000000 lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 ThenlResult = lResult Xor &H80000000 Xor lX8 Xor lY8ElseIf lX4 Or lY4 ThenIf lResult And &H40000000 ThenlResult = lResult Xor &HC0000000 Xor lX8 Xor lY8ElselResult = lResult Xor &H40000000 Xor lX8 Xor lY8End IfElselResult = lResult Xor lX8 Xor lY8End If AddUnsigned = lResultEnd Function Private Function md5_F(x, y, z)md5_F = (x And y) Or ((Not x) And z)End Function Private Function md5_G(x, y, z)md5_G = (x And z) Or (y And (Not z))End Function Private Function md5_H(x, y, z)md5_H = (x Xor y Xor z)End Function Private Function md5_I(x, y, z)md5_I = (y Xor (x Or (Not z)))End Function Private Sub md5_FF(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub Private Sub md5_GG(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub Private Sub md5_HH(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub Private Sub md5_II(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub Private Function ConvertToWordArray(sMessage)Dim lMessageLengthDim lNumberOfWordsDim lWordArray()Dim lBytePositionDim lByteCountDim lWordCount Const MODULUS_BITS = 512Const CONGRUENT_BITS = 448 lMessageLength = Len(sMessage) lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)ReDim lWordArray(lNumberOfWords - 1) lBytePosition = 0lByteCount = 0Do Until lByteCount >= lMessageLengthlWordCount = lByteCount \ BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTElWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)lByteCount = lByteCount + 1Loop lWordCount = lByteCount \ BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) ConvertToWordArray = lWordArrayEnd Function Private Function WordToHex(lValue)Dim lByteDim lCount For lCount = 0 To 3lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)WordToHex = WordToHex & Right("0" & Hex(lByte), 2)NextEnd Function Public Function MD5(sMessage, stype)m_lOnBits(0) = CLng(1)m_lOnBits(1) = CLng(3)m_lOnBits(2) = CLng(7)m_lOnBits(3) = CLng(15)m_lOnBits(4) = CLng(31)m_lOnBits(5) = CLng(63)m_lOnBits(6) = CLng(127)m_lOnBits(7) = CLng(255)m_lOnBits(8) = CLng(511)m_lOnBits(9) = CLng(1023)m_lOnBits(10) = CLng(2047)m_lOnBits(11) = CLng(4095)m_lOnBits(12) = CLng(8191)m_lOnBits(13) = CLng(16383)m_lOnBits(14) = CLng(32767)m_lOnBits(15) = CLng(65535)m_lOnBits(16) = CLng(131071)m_lOnBits(17) = CLng(262143)m_lOnBits(18) = CLng(524287)m_lOnBits(19) = CLng(1048575)m_lOnBits(20) = CLng(2097151)m_lOnBits(21) = CLng(4194303)m_lOnBits(22) = CLng(8388607)m_lOnBits(23) = CLng(16777215)m_lOnBits(24) = CLng(33554431)m_lOnBits(25) = CLng(67108863)m_lOnBits(26) = CLng(134217727)m_lOnBits(27) = CLng(268435455)m_lOnBits(28) = CLng(536870911)m_lOnBits(29) = CLng(1073741823)m_lOnBits(30) = CLng(2147483647) m_l2Power(0) = CLng(1)m_l2Power(1) = CLng(2)m_l2Power(2) = CLng(4)m_l2Power(3) = CLng(8)m_l2Power(4) = CLng(16)m_l2Power(5) = CLng(32)m_l2Power(6) = CLng(64)m_l2Power(7) = CLng(128)m_l2Power(8) = CLng(256)m_l2Power(9) = CLng(512)m_l2Power(10) = CLng(1024)m_l2Power(11) = CLng(2048)m_l2Power(12) = CLng(4096)m_l2Power(13) = CLng(8192)m_l2Power(14) = CLng(16384)m_l2Power(15) = CLng(32768)m_l2Power(16) = CLng(65536)m_l2Power(17) = CLng(131072)m_l2Power(18) = CLng(262144)m_l2Power(19) = CLng(524288)m_l2Power(20) = CLng(1048576)m_l2Power(21) = CLng(2097152)m_l2Power(22) = CLng(4194304)m_l2Power(23) = CLng(8388608)m_l2Power(24) = CLng(16777216)m_l2Power(25) = CLng(33554432)m_l2Power(26) = CLng(67108864)m_l2Power(27) = CLng(134217728)m_l2Power(28) = CLng(268435456)m_l2Power(29) = CLng(536870912)m_l2Power(30) = CLng(1073741824) Dim xDim kDim AADim BBDim CCDim DDDim aDim bDim cDim d Const S11 = 7Const S12 = 12Const S13 = 17Const S14 = 22Const S21 = 5Const S22 = 9Const S23 = 14Const S24 = 20Const S31 = 4Const S32 = 11Const S33 = 16Const S34 = 23Const S41 = 6Const S42 = 10Const S43 = 15Const S44 = 21 x = ConvertToWordArray(sMessage) a = &H67452301b = &HEFCDAB89c = &H98BADCFEd = &H10325476 For k = 0 To UBound(x) Step 16AA = aBB = bCC = cDD = d md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756md5_FF c, d, a, b, x(k + 2), S13, &H242070DBmd5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEEmd5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAFmd5_FF d, a, b, c, x(k + 5), S12, &H4787C62Amd5_FF c, d, a, b, x(k + 6), S13, &HA8304613md5_FF b, c, d, a, x(k + 7), S14, &HFD469501md5_FF a, b, c, d, x(k + 8), S11, &H698098D8md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AFmd5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BEmd5_FF a, b, c, d, x(k + 12), S11, &H6B901122md5_FF d, a, b, c, x(k + 13), S12, &HFD987193md5_FF c, d, a, b, x(k + 14), S13, &HA679438Emd5_FF b, c, d, a, x(k + 15), S14, &H49B40821 md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562md5_GG d, a, b, c, x(k + 6), S22, &HC040B340md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AAmd5_GG a, b, c, d, x(k + 5), S21, &HD62F105Dmd5_GG d, a, b, c, x(k + 10), S22, &H2441453md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87md5_GG b, c, d, a, x(k + 8), S24, &H455A14EDmd5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942md5_HH d, a, b, c, x(k + 8), S32, &H8771F681md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380Cmd5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FAmd5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085md5_HH b, c, d, a, x(k + 6), S34, &H4881D05md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665 md5_II a, b, c, d, x(k + 0), S41, &HF4292244md5_II d, a, b, c, x(k + 7), S42, &H432AFF97md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7md5_II b, c, d, a, x(k + 5), S44, &HFC93A039md5_II a, b, c, d, x(k + 12), S41, &H655B59C3md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47Dmd5_II b, c, d, a, x(k + 1), S44, &H85845DD1md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4Fmd5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0md5_II c, d, a, b, x(k + 6), S43, &HA3014314md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1md5_II a, b, c, d, x(k + 4), S41, &HF7537E82md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BBmd5_II b, c, d, a, x(k + 9), S44, &HEB86D391 a = AddUnsigned(a, AA)b = AddUnsigned(b, BB)c = AddUnsigned(c, CC)d = AddUnsigned(d, DD)Next If stype = 32 ThenMD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))ElseMD5 = LCase(WordToHex(b) & WordToHex(c))End IfEnd FunctionSub test()MsgBox MD5("a", 16) '16位加密MsgBox MD5("a", 32) '32位加密End Sub |
发表评论