1
2'**************************************************
3'* 作者:awaysrain(绝对零度) *
4'* 完成时间:2003-10-10 *
5'* 测试环境:WIN2000SERVER,SERV-U 4.2-beta版 *
6'**************************************************
7Dim iniPath,iniFileName,iniStr,tmpStr,n
8Dim userName,passWord,tmp
9
10userName = "myfso222" '用户名
11passWord = "awaysrain" '密码
12tmp = "ai" '随机生成两个小写字母,(应该是随机生成的,但是我这里省略了)
13passWord = tmp & UCase(md5(passWord)) '密码,是MD5加密过的,用动网的MD5加密程序,具体算法是随机生成两位小写字母,然后和你的密码连接后进行MD5加密,把随机生成的密码和MD5加密后的结果作为密码存放,举个例子来说比如下面的awaysrain用户,我的密码为awaysrain先随机生成两位小写字母ai,和我的密码awaysrain连接得到aiawaysrain把aiawaysrain进行MD5加密得到9118BFD94A9CE9CF37AE5BAA947ED596把随机生成两位小写字母ai和MD5加密后的结果9118BFD94A9CE9CF37AE5BAA947ED596连接得到密码ai9118BFD94A9CE9CF37AE5BAA947ED596
14
15iniPath="D:\Program Files\Serv-U" 'ini文件的路径
16iniFileName = "ServUDaemon.ini" 'ini的文件名
17
18Set fso=Server.CreateObject("Scripting.FileSystemObject")
19Set ServUIni = fso.OpenTextFile(iniPath & "\" & iniFileName,1,false)
20
21iniStr = ""
22n = 0
23addedUserList = false
24
25Set tf = fso.CreateTextFile(iniPath & "\" & iniFileName & "._awaysrain.tmp", True)
26'生成新的临时INI文件
27
28Do While not ServUIni.AtEndOfStream
29tmpStr = ServUIni.ReadLine
30
31If Instr("awaysrain||" & tmpStr,"awaysrain||User")>0 Then
32'记录用户原来的数量
33n = n+1
34End If
35
36If Instr("awaysrain||" & tmpStr,"awaysrain||[USER=")>0 and not addedUserList Then
37'往用户列表的部分添加现在的用户
38n = n +1
39tf.WriteLine("User" & n & "=" & userName & "|1|0")
40addedUserList = true
41End If
42tf.WriteLine(tmpStr)
43Loop
44ServUIni.Close
45
46'添加新用户的信息,具体内容可以在SERV-U中新建用户并对照INI文件
47
48tf.WriteLine("[USER=" & userName & "|1]") '用户名
49tf.WriteLine("Password=" & passWord) '密码
50tf.WriteLine("HomeDir=e:\temp") '主目录
51tf.WriteLine("RelPaths=1") '是否锁定用户于主目录
52tf.WriteLine("MaxUsersLoginPerIP=1") '相同IP同时登录数
53tf.WriteLine("SpeedLimitDown=102400") '最大下载速度
54tf.WriteLine("TimeOut=600") '空闲超时时间(秒)
55tf.WriteLine("Access1=E:\Temp|RLP") '可访问目录,可以不是一个,比如 'Access2=E:\Temp1|RLP'
56
57tf.Close
58'--------------------备份原来的INI文件--------------------------
59Set f1 = fso.GetFile(iniPath & "\" & iniFileName)
60f1.Copy (iniPath & "\" & iniFileName & "._awaysrain.bak")
61f1.Delete
62'--------------------把生成的临时INI文件改为正式的INI--------------------------
63Set f1 = fso.GetFile(iniPath & "\" & iniFileName & "._awaysrain.tmp")
64f1.Copy (iniPath & "\" & iniFileName)
65f1.Delete
66
67Set fso = nothing
注:以上代码假设ServUDaemon.ini中的格式只有一个域并已经至少有一个用户
测试的ServUDaemon.ini文件结构如下:
[Domain1]
User1=222|1|0
User2=myfso111|1|0
[USER=222|1]
Password=hwB1ECF70CDAF5DAE2B981AE394EEFCDC0
HomeDir=E:\Temp
RelPaths=1
TimeOut=600
Access1=E:\Temp|RLP
[USER=myfso111|1]
Password=ai9118BFD94A9CE9CF37AE5BAA947ED596
HomeDir=e:\temp
RelPaths=1
TimeOut=600
Access1=E:\Temp|RLP
生成后的文件结构如下
[Domain1]
User1=222|1|0
User2=myfso111|1|0
User3=myfso222|1|0
[USER=222|1]
Password=hwB1ECF70CDAF5DAE2B981AE394EEFCDC0
HomeDir=E:\Temp
RelPaths=1
TimeOut=600
Access1=E:\Temp|RLP
[USER=myfso111|1]
Password=ai9118BFD94A9CE9CF37AE5BAA947ED596
HomeDir=e:\temp
RelPaths=1
TimeOut=600
Access1=E:\Temp|RLP
[USER=myfso222|1]
Password=ai9118BFD94A9CE9CF37AE5BAA947ED596
HomeDir=e:\temp
RelPaths=1
TimeOut=600
Access1=E:\Temp|RLP
附MD5.ASP
1
2Private Const BITS_TO_A_BYTE = 8
3Private Const BYTES_TO_A_WORD = 4
4Private Const BITS_TO_A_WORD = 32
5
6Private m_lOnBits(30)
7Private m_l2Power(30)
8
9Private Function LShift(lValue, iShiftBits)
10If iShiftBits = 0 Then
11LShift = lValue
12Exit Function
13ElseIf iShiftBits = 31 Then
14If lValue And 1 Then
15LShift = &H80000000
16Else
17LShift = 0
18End If
19Exit Function
20ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
21Err.Raise 6
22End If
23
24If (lValue And m_l2Power(31 - iShiftBits)) Then
25LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
26Else
27LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
28End If
29End Function
30
31Private Function RShift(lValue, iShiftBits)
32If iShiftBits = 0 Then
33RShift = lValue
34Exit Function
35ElseIf iShiftBits = 31 Then
36If lValue And &H80000000 Then
37RShift = 1
38Else
39RShift = 0
40End If
41Exit Function
42ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
43Err.Raise 6
44End If
45
46RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)
47
48If (lValue And &H80000000) Then
49RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
50End If
51End Function
52
53Private Function RotateLeft(lValue, iShiftBits)
54RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
55End Function
56
57Private Function AddUnsigned(lX, lY)
58Dim lX4
59Dim lY4
60Dim lX8
61Dim lY8
62Dim lResult
63
64lX8 = lX And &H80000000
65lY8 = lY And &H80000000
66lX4 = lX And &H40000000
67lY4 = lY And &H40000000
68
69lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)
70
71If lX4 And lY4 Then
72lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
73ElseIf lX4 Or lY4 Then
74If lResult And &H40000000 Then
75lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
76Else
77lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
78End If
79Else
80lResult = lResult Xor lX8 Xor lY8
81End If
82
83AddUnsigned = lResult
84End Function
85
86Private Function md5_F(x, y, z)
87md5_F = (x And y) Or ((Not x) And z)
88End Function
89
90Private Function md5_G(x, y, z)
91md5_G = (x And z) Or (y And (Not z))
92End Function
93
94Private Function md5_H(x, y, z)
95md5_H = (x Xor y Xor z)
96End Function
97
98Private Function md5_I(x, y, z)
99md5_I = (y Xor (x Or (Not z)))
100End Function
101
102Private Sub md5_FF(a, b, c, d, x, s, ac)
103a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
104a = RotateLeft(a, s)
105a = AddUnsigned(a, b)
106End Sub
107
108Private Sub md5_GG(a, b, c, d, x, s, ac)
109a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
110a = RotateLeft(a, s)
111a = AddUnsigned(a, b)
112End Sub
113
114Private Sub md5_HH(a, b, c, d, x, s, ac)
115a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
116a = RotateLeft(a, s)
117a = AddUnsigned(a, b)
118End Sub
119
120Private Sub md5_II(a, b, c, d, x, s, ac)
121a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
122a = RotateLeft(a, s)
123a = AddUnsigned(a, b)
124End Sub
125
126Private Function ConvertToWordArray(sMessage)
127Dim lMessageLength
128Dim lNumberOfWords
129Dim lWordArray()
130Dim lBytePosition
131Dim lByteCount
132Dim lWordCount
133
134Const MODULUS_BITS = 512
135Const CONGRUENT_BITS = 448
136
137lMessageLength = Len(sMessage)
138
139lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
140ReDim lWordArray(lNumberOfWords - 1)
141
142lBytePosition = 0
143lByteCount = 0
144Do Until lByteCount >= lMessageLength
145lWordCount = lByteCount \ BYTES_TO_A_WORD
146lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
147lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
148lByteCount = lByteCount + 1
149Loop
150
151lWordCount = lByteCount \ BYTES_TO_A_WORD
152lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
153
154lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)
155
156lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
157lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
158
159ConvertToWordArray = lWordArray
160End Function
161
162Private Function WordToHex(lValue)
163Dim lByte
164Dim lCount
165
166For lCount = 0 To 3
167lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
168WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
169Next
170End Function
171Public Function MD5(sMessage)
172m_lOnBits(0) = CLng(1)
173m_lOnBits(1) = CLng(3)
174m_lOnBits(2) = CLng(7)
175m_lOnBits(3) = CLng(15)
176m_lOnBits(4) = CLng(31)
177m_lOnBits(5) = CLng(63)
178m_lOnBits(6) = CLng(127)
179m_lOnBits(7) = CLng(255)
180m_lOnBits(8) = CLng(511)
181m_lOnBits(9) = CLng(1023)
182m_lOnBits(10) = CLng(2047)
183m_lOnBits(11) = CLng(4095)
184m_lOnBits(12) = CLng(8191)
185m_lOnBits(13) = CLng(16383)
186m_lOnBits(14) = CLng(32767)
187m_lOnBits(15) = CLng(65535)
188m_lOnBits(16) = CLng(131071)
189m_lOnBits(17) = CLng(262143)
190m_lOnBits(18) = CLng(524287)
191m_lOnBits(19) = CLng(1048575)
192m_lOnBits(20) = CLng(2097151)
193m_lOnBits(21) = CLng(4194303)
194m_lOnBits(22) = CLng(8388607)
195m_lOnBits(23) = CLng(16777215)
196m_lOnBits(24) = CLng(33554431)
197m_lOnBits(25) = CLng(67108863)
198m_lOnBits(26) = CLng(134217727)
199m_lOnBits(27) = CLng(268435455)
200m_lOnBits(28) = CLng(536870911)
201m_lOnBits(29) = CLng(1073741823)
202m_lOnBits(30) = CLng(2147483647)
203
204m_l2Power(0) = CLng(1)
205m_l2Power(1) = CLng(2)
206m_l2Power(2) = CLng(4)
207m_l2Power(3) = CLng(8)
208m_l2Power(4) = CLng(16)
209m_l2Power(5) = CLng(32)
210m_l2Power(6) = CLng(64)
211m_l2Power(7) = CLng(128)
212m_l2Power(8) = CLng(256)
213m_l2Power(9) = CLng(512)
214m_l2Power(10) = CLng(1024)
215m_l2Power(11) = CLng(2048)
216m_l2Power(12) = CLng(4096)
217m_l2Power(13) = CLng(8192)
218m_l2Power(14) = CLng(16384)
219m_l2Power(15) = CLng(32768)
220m_l2Power(16) = CLng(65536)
221m_l2Power(17) = CLng(131072)
222m_l2Power(18) = CLng(262144)
223m_l2Power(19) = CLng(524288)
224m_l2Power(20) = CLng(1048576)
225m_l2Power(21) = CLng(2097152)
226m_l2Power(22) = CLng(4194304)
227m_l2Power(23) = CLng(8388608)
228m_l2Power(24) = CLng(16777216)
229m_l2Power(25) = CLng(33554432)
230m_l2Power(26) = CLng(67108864)
231m_l2Power(27) = CLng(134217728)
232m_l2Power(28) = CLng(268435456)
233m_l2Power(29) = CLng(536870912)
234m_l2Power(30) = CLng(1073741824)
235
236
237Dim x
238Dim k
239Dim AA
240Dim BB
241Dim CC
242Dim DD
243Dim a
244Dim b
245Dim c
246Dim d
247
248Const S11 = 7
249Const S12 = 12
250Const S13 = 17
251Const S14 = 22
252Const S21 = 5
253Const S22 = 9
254Const S23 = 14
255Const S24 = 20
256Const S31 = 4
257Const S32 = 11
258Const S33 = 16
259Const S34 = 23
260Const S41 = 6
261Const S42 = 10
262Const S43 = 15
263Const S44 = 21
264
265x = ConvertToWordArray(sMessage)
266
267a = &H67452301
268b = &HEFCDAB89
269c = &H98BADCFE
270d = &H10325476
271
272For k = 0 To UBound(x) Step 16
273AA = a
274BB = b
275CC = c
276DD = d
277
278md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478
279md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756
280md5_FF c, d, a, b, x(k + 2), S13, &H242070DB
281md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
282md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
283md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A
284md5_FF c, d, a, b, x(k + 6), S13, &HA8304613
285md5_FF b, c, d, a, x(k + 7), S14, &HFD469501
286md5_FF a, b, c, d, x(k + 8), S11, &H698098D8
287md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
288md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
289md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
290md5_FF a, b, c, d, x(k + 12), S11, &H6B901122
291md5_FF d, a, b, c, x(k + 13), S12, &HFD987193
292md5_FF c, d, a, b, x(k + 14), S13, &HA679438E
293md5_FF b, c, d, a, x(k + 15), S14, &H49B40821
294
295md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562
296md5_GG d, a, b, c, x(k + 6), S22, &HC040B340
297md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51
298md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
299md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D
300md5_GG d, a, b, c, x(k + 10), S22, &H2441453
301md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681
302md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
303md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
304md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6
305md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87
306md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED
307md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905
308md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
309md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9
310md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
311
312md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942
313md5_HH d, a, b, c, x(k + 8), S32, &H8771F681
314md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122
315md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C
316md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
317md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
318md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
319md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
320md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6
321md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA
322md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085
323md5_HH b, c, d, a, x(k + 6), S34, &H4881D05
324md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039
325md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
326md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
327md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665
328
329md5_II a, b, c, d, x(k + 0), S41, &HF4292244
330md5_II d, a, b, c, x(k + 7), S42, &H432AFF97
331md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7
332md5_II b, c, d, a, x(k + 5), S44, &HFC93A039
333md5_II a, b, c, d, x(k + 12), S41, &H655B59C3
334md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92
335md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D
336md5_II b, c, d, a, x(k + 1), S44, &H85845DD1
337md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F
338md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
339md5_II c, d, a, b, x(k + 6), S43, &HA3014314
340md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
341md5_II a, b, c, d, x(k + 4), S41, &HF7537E82
342md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
343md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
344md5_II b, c, d, a, x(k + 9), S44, &HEB86D391
345
346a = AddUnsigned(a, AA)
347b = AddUnsigned(b, BB)
348c = AddUnsigned(c, CC)
349d = AddUnsigned(d, DD)
350Next
351
352MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
353'MD5=LCase(WordToHex(b) & WordToHex(c)) 'I crop this to fit 16byte database password :D
354End Function