|
Быстрое вычисление хэша файла без прав админа | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
06.12.12
✎
16:07
|
Раньше пользовался этим http://xstandard.com (freeware) для вычисления MD5 для файлов произвольного размера. Однако она требует регистрации в HKLM и соответственно админских прав для установки.
А теперь потребовалось без прав админа поиметь тоже самое (не обязательно MD5). В идеале хотелось бы нативную внешнюю компоненту. Может кто поделится или кинет ссылку? |
|||
1
TormozIT
гуру
06.12.12
✎
17:15
|
Желаемого решения не нашел.
Из хромых выбрал вариант через CAPICOM http://infostart.ru/public/82506/ |
|||
2
kvk
06.12.12
✎
19:25
|
Если есть .Net Framework, то можно в сторону http://infostart.ru/public/20035/ посмотреть, если бесплатно то как-то так еще попробовать:
WSS = Новый COMОбъект("Wscript.Shell"); command = "$file = New-Object System.IO.FileStream('D:\temp\ubuntu-12.04-desktop-i386.iso', [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::Read, 16kb);" + "$CSP = New-Object 'System.Security.Cryptography.MD5CryptoServiceProvider';" + "$hash = ($CSP.ComputeHash($file) | ForEach-Object {$_.ToString('x2')}) -join '';" + "$file.Close(); $hash"; oExec = WSS.exec("powershell -WindowStyle Hidden -Command " + command); oExec.StdIn.Close(); Пока (oExec.Status <> 1) Цикл Предупреждение("Считаем!!", 1); КонецЦикла; Сообщить(oExec.StdOut.ReadAll()); |
|||
3
Chai Nic
06.12.12
✎
19:27
|
А md5.exe запускать религия не позволяет?
|
|||
4
H A D G E H O G s
06.12.12
✎
19:48
|
(1) Почему хромых?
|
|||
5
vde69
06.12.12
✎
19:50
|
http://code.google.com/p/restoration-base-1c8/downloads/detail?name=Bin1CD_VK_DistrNative_1_1_7.rar&can=2&q=
правда это простое CRC, работает ОЧЕНЬ БЫСТРО! |
|||
6
vde69
06.12.12
✎
19:54
|
(4)CAPICOM - больше не поддерживается
|
|||
7
TormozIT
гуру
06.12.12
✎
23:55
|
(5) В описании не нашел. Она будет без админских прав регистрироваться?
|
|||
8
vde69
модератор
07.12.12
✎
00:17
|
(7) технология - навите, по идее права не нужны,
порядок быдкет такой .OpenFile (ИмяФайла) .РасчитатьCRC32/CallCRC32 () = .CRC .CloseFile () по идее можешь под себя ее заточить, процедуру OpenFile упростить, там для тебя есть лишнее :) |
|||
9
Torquader
07.12.12
✎
01:46
|
Я, например, недавно расчёт MD5 просто на VbScript написал, причём без использования сдвиговых операций - только на умножении, делении и битовых операциях на целых со знаком - пришлось их на две переменные делить - но - оно даже работает.
Могу куда-нить выложить, если кого-то заинтересует. |
|||
10
Bober
07.12.12
✎
06:38
|
(9) интересно
|
|||
11
Torquader
07.12.12
✎
21:33
|
Это алгоритм на VbScript, который формирует алгоритм для расчёта суммы Md5.
' 05-12-2012 Алгоритм формирования алгоритма контрольной суммы MD5 проверен. ' Данный алгоритм формирует файл сценария, в котором получается сам алгоритм. ' Запускать файл рекомендуется только один раз. ' Из самого алгоритма желательно удалить тестовую функцию, чтобы не занимала места. Set fso=CreateObject("Scripting.FileSystemObject") Set f=fso.CreateTextFile("Md5Str.vbs",True,0) f.WriteLine("'Md5 runtime siute - autogenerated") Function GetHex(ByRef s) Dim l Dim i Dim j l=Len(s) GetHex=0 For i=1 To l Step 1 j=Asc(Mid(s,i,1)) If(j>=48)AND(j<=57)Then GetHex=(GetHex*16)+(j-48) ElseIf(j>=65)AND(j<=70)Then GetHex=(GetHex*16)+(j-55) ElseIf(j>=97)AND(j<=102)Then GetHex=(GetHex*16)+(j-87) Else GetHex=GetHex/0 End If Next End Function Function OutTl(ByRef i) Dim r Dim j r=Int(4294967296*abs(sin(i))) s="" j=Int(r/65536) OutTl=CStr(r-(j*65536)) End Function Function OutTh(ByRef i) Dim r Dim j r=Int(4294967296*abs(sin(i))) j=Int(r/65536) OutTh=CStr(j) End Function Function OutF(ByRef lh,ByRef x,ByRef y,ByRef z) OutF="((((" & x & lh & " AND " & y & lh & ")OR((NOT " & x & lh & ")AND " & z & lh & ")))AND 65535)" End Function Function OutG(ByRef lh,ByRef x,ByRef y,ByRef z) OutG="((((" & x & lh & " AND " & z & lh & ")OR(" & y & lh & " AND (NOT " & z & lh & "))))AND 65535)" End Function Function OutH(ByRef lh,ByRef x,ByRef y,ByRef z) OutH="((((" & x & lh & " XOR " & y & lh & ")XOR " & z & lh & "))AND 65535)" End Function Function OutI(ByRef lh,ByRef x,ByRef y,ByRef z) OutI="(((" & y & lh & " XOR(" & x & lh & " OR(NOT " & z & lh & "))))AND 65535)" End Function Function LeftMask16(ByRef v) Dim i i=v LeftMask16=0 While i>0 LeftMask16=(LeftMask16*2)+1 i=i-1 Wend End Function Function RightMask16(ByRef v) Dim i i=v RightMask16=0 While i>0 RightMask16=(RightMask16/2)+32768 i=i-1 Wend End Function Function TwoPower(ByRef p) Dim i i=p TwoPower=1 While i>0 TwoPower=TwoPower*2 i=i-1 Wend End Function Sub RotateLeft(ByRef s) If s=0 Then f.WriteLine(vbTab & "Rl=l") f.WriteLine(vbTab & "Rh=h") ElseIf s=16 Then f.WriteLine(vbTab & "Rh=l") f.WriteLine(vbTab & "Rl=h") ElseIf s<16 Then f.WriteLine(vbTab & "Rl=((l AND " & LeftMask16(16-s) & ")*" & TwoPower(s) & ")OR((h AND " & RightMask16(s) & ")/" & TwoPower(16-s) & ")") f.WriteLine(vbTab & "Rh=((h AND " & LeftMask16(16-s) & ")*" & TwoPower(s) & ")OR((l AND " & RightMask16(s) & ")/" & TwoPower(16-s) & ")") ElseIf s<32 Then f.WriteLine(vbTab & "Rl=((l AND " & RightMask16(s-16) & ")/" & TwoPower(32-s) & ")OR((h AND " & LeftMask16(32-s) & ")*" & TwoPower(s-16) & ")") f.WriteLine(vbTab & "Rh=((h AND " & RightMask16(s-16) & ")/" & TwoPower(32-s) & ")OR((l AND " & LeftMask16(32-s) & ")*" & TwoPower(s-16) & ")") End If End Sub Sub RotateLeftOld(ByRef s) Dim i Dim m1 Dim m2 Dim n1 Dim n2 If s=0 Then f.WriteLine(vbTab & "rl=l") f.WriteLine(vbTab & "rh=h") ElseIf s<16 Then m1=65535 n1=1 n2=65536 For i=1 To s Step 1 m1=m1\2 n1=n1*2 n2=n2\2 Next m2=65535 XOR m1 f.WriteLine(vbTab & "rl=((l AND " & CStr(m1) & ")* " & CStr(n1) & ")OR((h AND " & CStr(m2) & ")\ " & CStr(n2) & ")") f.WriteLine(vbTab & "rh=((h AND " & CStr(m1) & ")* " & CStr(n1) & ")OR((l AND " & CStr(m2) & ")\ " & CStr(n2) & ")") ElseIf s>16 Then m1=0 n1=1 n2=65536 For i=31 To s Step -1 m1=(m1*2)+1 n1=n1*2 n2=n2\2 Next m2=65535 XOR m1 f.WriteLine(vbTab & "rl=((l AND " & CStr(m2) & ")\ " & CStr(n1) & ")OR((h AND " & CStr(m1) & ")* " & CStr(n2) & ")") f.WriteLine(vbTab & "rh=((h AND " & CStr(m2) & ")\ " & CStr(n1) & ")OR((l AND " & CStr(m1) & ")* " & CStr(n2) & ")") Else f.WriteLine(vbTab & "rl=h") f.WriteLine(vbTab & "rh=l") End If End Sub Sub BlockOne(ByRef t,ByRef k,ByRef s,ByRef i) Dim a Dim b Dim c Dim d a=Mid(t,1,1) b=Mid(t,2,1) c=Mid(t,3,1) d=Mid(t,4,1) f.WriteLine(vbTab & "l=" & OutF("l",b,c,d) & "+" & a & "l+Xl(" & CStr(k) & ")+" & OutTl(i)) f.WriteLine(vbTab & "h=" & OutF("h",b,c,d) & "+" & a & "h+Xh(" & CStr(k) & ")+" & OutTh(i)) f.WriteLine(vbTab & "h=(h+(l\65536))AND 65535") f.WriteLine(vbTab & "l=l AND 65535") ' теперь циклический поворот налево на S для h и l RotateLeft s f.WriteLine(vbTab & "rl=" & b & "l+rl") f.WriteLine(vbTab & a & "h=(" & b & "h+rh+(rl\65536))AND 65535") f.WriteLine(vbTab & a & "l=rl AND 65535") End Sub Sub BlockTwo(ByRef t,ByRef k,ByRef s,ByRef i) Dim a Dim b Dim c Dim d a=Mid(t,1,1) b=Mid(t,2,1) c=Mid(t,3,1) d=Mid(t,4,1) f.WriteLine(vbTab & "l=" & OutG("l",b,c,d) & "+" & a & "l+Xl(" & CStr(k) & ")+" & OutTl(i)) f.WriteLine(vbTab & "h=" & OutG("h",b,c,d) & "+" & a & "h+Xh(" & CStr(k) & ")+" & OutTh(i)) f.WriteLine(vbTab & "h=(h+(l\65536))AND 65535") f.WriteLine(vbTab & "l=l AND 65535") ' теперь циклический поворот налево на S для h и l RotateLeft s f.WriteLine(vbTab & "rl=" & b & "l+rl") f.WriteLine(vbTab & a & "h=(" & b & "h+rh+(rl\65536))AND 65535") f.WriteLine(vbTab & a & "l=rl AND 65535") End Sub Sub BlockThree(ByRef t,ByRef k,ByRef s,ByRef i) Dim a Dim b Dim c Dim d a=Mid(t,1,1) b=Mid(t,2,1) c=Mid(t,3,1) d=Mid(t,4,1) f.WriteLine(vbTab & "l=" & OutH("l",b,c,d) & "+" & a & "l+Xl(" & CStr(k) & ")+" & OutTl(i)) f.WriteLine(vbTab & "h=" & OutH("h",b,c,d) & "+" & a & "h+Xh(" & CStr(k) & ")+" & OutTh(i)) f.WriteLine(vbTab & "h=(h+(l\65536))AND 65535") f.WriteLine(vbTab & "l=l AND 65535") ' теперь циклический поворот налево на S для h и l RotateLeft s f.WriteLine(vbTab & "rl=" & b & "l+rl") f.WriteLine(vbTab & a & "h=(" & b & "h+rh+(rl\65536))AND 65535") f.WriteLine(vbTab & a & "l=rl AND 65535") End Sub Sub BlockFour(ByRef t,ByRef k,ByRef s,ByRef i) Dim a Dim b Dim c Dim d a=Mid(t,1,1) b=Mid(t,2,1) c=Mid(t,3,1) d=Mid(t,4,1) f.WriteLine(vbTab & "l=" & OutI("l",b,c,d) & "+" & a & "l+Xl(" & CStr(k) & ")+" & OutTl(i)) f.WriteLine(vbTab & "h=" & OutI("h",b,c,d) & "+" & a & "h+Xh(" & CStr(k) & ")+" & OutTh(i)) f.WriteLine(vbTab & "h=(h+(l\65536))AND 65535") f.WriteLine(vbTab & "l=l AND 65535") ' теперь циклический поворот налево на S для h и l RotateLeft s f.WriteLine(vbTab & "rl=" & b & "l+rl") f.WriteLine(vbTab & a & "h=(" & b & "h+rh+(rl\65536))AND 65535") f.WriteLine(vbTab & a & "l=rl AND 65535") End Sub f.WriteLine("Function Md5_Step(ByRef Xl(),ByRef Xh(),ByRef Al,ByRef Ah,ByRef Bl,ByRef Bh,ByRef Cl,ByRef Ch,ByRef Dl,ByRef Dh)") f.WriteLine(vbTab & "Dim l") f.WriteLine(vbTab & "Dim h") f.WriteLine(vbTab & "Dim rl") f.WriteLine(vbTab & "Dim rh") Dim i Dim j For i=1 To 4 Step 1 j=Mid("ABCD",i,1) f.WriteLine(vbTab & "Dim l" & j & "l") f.WriteLine(vbTab & "Dim l" & j & "h") Next For i=1 To 4 Step 1 j=Mid("ABCD",i,1) f.WriteLine(vbTab & "l" & j & "l=" & j & "l") f.WriteLine(vbTab & "l" & j & "h=" & j & "h") Next BlockOne "ABCD",0,7,1 BlockOne "DABC",1,12,2 BlockOne "CDAB",2,17,3 BlockOne "BCDA",3,22,4 BlockOne "ABCD",4,7,5 BlockOne "DABC",5,12,6 BlockOne "CDAB",6,17,7 BlockOne "BCDA",7,22,8 BlockOne "ABCD",8,7,9 BlockOne "DABC",9,12,10 BlockOne "CDAB",10,17,11 BlockOne "BCDA",11,22,12 BlockOne "ABCD",12,7,13 BlockOne "DABC",13,12,14 BlockOne "CDAB",14,17,15 BlockOne "BCDA",15,22,16 BlockTwo "ABCD",1,5,17 BlockTwo "DABC",6,9,18 BlockTwo "CDAB",11,14,19 BlockTwo "BCDA",0,20,20 BlockTwo "ABCD",5,5,21 BlockTwo "DABC",10,9,22 BlockTwo "CDAB",15,14,23 BlockTwo "BCDA",4,20,24 BlockTwo "ABCD",9,5,25 BlockTwo "DABC",14,9,26 BlockTwo "CDAB",3,14,27 BlockTwo "BCDA",8,20,28 BlockTwo "ABCD",13,5,29 BlockTwo "DABC",2,9,30 BlockTwo "CDAB",7,14,31 BlockTwo "BCDA",12,20,32 BlockThree "ABCD",5,4,33 BlockThree "DABC",8,11,34 BlockThree "CDAB",11,16,35 BlockThree "BCDA",14,23,36 BlockThree "ABCD",1,4,37 BlockThree "DABC",4,11,38 BlockThree "CDAB",7,16,39 BlockThree "BCDA",10,23,40 BlockThree "ABCD",13,4,41 BlockThree "DABC",0,11,42 BlockThree "CDAB",3,16,43 BlockThree "BCDA",6,23,44 BlockThree "ABCD",9,4,45 BlockThree "DABC",12,11,46 BlockThree "CDAB",15,16,47 BlockThree "BCDA",2,23,48 BlockFour "ABCD",0,6,49 BlockFour "DABC",7,10,50 BlockFour "CDAB",14,15,51 BlockFour "BCDA",5,21,52 BlockFour "ABCD",12,6,53 BlockFour "DABC",3,10,54 BlockFour "CDAB",10,15,55 BlockFour "BCDA",1,21,56 BlockFour "ABCD",8,6,57 BlockFour "DABC",15,10,58 BlockFour "CDAB",6,15,59 BlockFour "BCDA",13,21,60 BlockFour "ABCD",4,6,61 BlockFour "DABC",11,10,62 BlockFour "CDAB",2,15,63 BlockFour "BCDA",9,21,64 ' теперь сложение For i=1 To 4 Step 1 j=Mid("ABCD",i,1) f.WriteLine(vbTab & j & "l=l" & j & "l+" & j & "l") f.WriteLine(vbTab & j & "h=l" & j & "h+" & j & "h") f.WriteLine(vbTab & j & "h=(" & j & "h+(" & j & "l\65536))AND 65535") f.WriteLine(vbTab & j & "l=" & j & "l AND 65535") Next f.WriteLine("End Function") f.WriteLine("Function Md5OutHexDigit(ByRef d)") f.WriteLine(vbTab & "If d<10 Then Md5OutHexDigit=Chr(d+48)Else Md5OutHexDigit=Chr(d+87)") f.WriteLine("End Function") f.WriteLine("Function Md5Count(ByRef s,ByRef f)") For i=1 To 4 Step 1 j=Mid("ABCD",i,1) f.WriteLine(vbTab & "Dim " & j & "l") f.WriteLine(vbTab & "Dim " & j & "h") Next f.WriteLine(vbTab & "Dim Xl(15)") f.WriteLine(vbTab & "Dim Xh(15)") f.WriteLine(vbTab & "Dim l") f.WriteLine(vbTab & "Dim m") f.WriteLine(vbTab & "Dim i") f.WriteLine(vbTab & "Dim j") f.WriteLine(vbTab & "Dim k") f.WriteLine(vbTab & "Dim n") f.WriteLine(vbTab & "l=Len(s)") ' количество байт в исходном сообщении f.WriteLine(vbTab & "i=l") f.WriteLine(vbTab & "m=Chr((i AND 31)*8)") f.WriteLine(vbTab & "i=i\32") f.WriteLine(vbTab & "For j=1 To 7 Step 1") f.WriteLine(vbTab & vbTab & "m=m & Chr(i AND 255)") f.WriteLine(vbTab & vbTab & "i=i\256") f.WriteLine(vbTab & "Next") f.WriteLine(vbTab & "Al=" & CStr(GetHex("2301"))) f.WriteLine(vbTab & "Ah=" & CStr(GetHex("6745"))) f.WriteLine(vbTab & "Bl=" & CStr(GetHex("AB89"))) f.WriteLine(vbTab & "Bh=" & CStr(GetHex("EFCD"))) f.WriteLine(vbTab & "Cl=" & CStr(GetHex("DCFE"))) f.WriteLine(vbTab & "Ch=" & CStr(GetHex("98BA"))) f.WriteLine(vbTab & "Dl=" & CStr(GetHex("5476"))) f.WriteLine(vbTab & "Dh=" & CStr(GetHex("1032"))) f.WriteLine(vbTab & "n=l-(l AND 63)") f.WriteLine(vbTab & "i=1") f.WriteLine(vbTab & "Do") f.WriteLine(vbTab & vbTab & "If i>=n Then Exit Do") f.WriteLine(vbTab & vbTab & "For j=0 To 15 Step 1") f.WriteLine(vbTab & vbTab & vbTab & "k=(j*4)+i") f.WriteLine(vbTab & vbTab & vbTab & "Xl(j)=Asc(Mid(s,k,1))+(Asc(Mid(s,k+1,1))*256)") f.WriteLine(vbTab & vbTab & vbTab & "Xh(j)=Asc(Mid(s,k+2,1))+(Asc(Mid(s,k+3,1))*256)") f.WriteLine(vbTab & vbTab & "Next") f.WriteLine(vbTab & vbTab & "Md5_Step Xl,Xh,Al,Ah,Bl,Bh,Cl,Ch,Dl,Dh") f.WriteLine(vbTab & vbTab & "i=i+64") f.WriteLine(vbTab & "Loop") ' У нас может быть или один или два шага f.WriteLine(vbTab & "If(l AND 63)<55 Then") f.WriteLine(vbTab & vbTab & "For j=0 To 15 Step 1") f.WriteLine(vbTab & vbTab & vbTab & "k=(j*4)+n") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else If j=14 Then i=Asc(Mid(m,1,1)) Else If j=15 Then i=Asc(Mid(m,5,1)) Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xl(j)=i") f.WriteLine(vbTab & vbTab & vbTab & "k=k+1") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else If j=14 Then i=Asc(Mid(m,2,1)) Else If j=15 Then i=Asc(Mid(m,6,1)) Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xl(j)=Xl(j)+(i*256)") f.WriteLine(vbTab & vbTab & vbTab & "k=k+1") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else If j=14 Then i=Asc(Mid(m,3,1)) Else If j=15 Then i=Asc(Mid(m,7,1)) Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xh(j)=i") f.WriteLine(vbTab & vbTab & vbTab & "k=k+1") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else If j=14 Then i=Asc(Mid(m,4,1)) Else If j=15 Then i=Asc(Mid(m,8,1)) Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xh(j)=Xh(j)+(i*256)") f.WriteLine(vbTab & vbTab & "Next") f.WriteLine(vbTab & vbTab & "Md5_Step Xl,Xh,Al,Ah,Bl,Bh,Cl,Ch,Dl,Dh") f.WriteLine(vbTab & "Else") f.WriteLine(vbTab & vbTab & "For j=0 To 15 Step 1") f.WriteLine(vbTab & vbTab & vbTab & "k=(j*4)+n") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xl(j)=i") f.WriteLine(vbTab & vbTab & vbTab & "k=k+1") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xl(j)=Xl(j)+(i*256)") f.WriteLine(vbTab & vbTab & vbTab & "k=k+1") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xh(j)=i") f.WriteLine(vbTab & vbTab & vbTab & "k=k+1") f.WriteLine(vbTab & vbTab & vbTab & "If k<l Then i=Asc(Mid(s,k+1,1)) Else If k=l Then i=128 Else i=0") f.WriteLine(vbTab & vbTab & vbTab & "Xh(j)=Xh(j)+(i*256)") f.WriteLine(vbTab & vbTab & "Next") f.WriteLine(vbTab & vbTab & "Md5_Step Xl,Xh,Al,Ah,Bl,Bh,Cl,Ch,Dl,Dh") f.WriteLine(vbTab & vbTab & "For j=0 To 13 Step 1") f.WriteLine(vbTab & vbTab & vbTab & "Xl(j)=0") f.WriteLine(vbTab & vbTab & vbTab & "Xh(j)=0") f.WriteLine(vbTab & vbTab & "Next") f.WriteLine(vbTab & vbTab & "Xl(14)=Asc(Mid(m,1,1))+(Asc(Mid(m,2,1))*256)") f.WriteLine(vbTab & vbTab & "Xh(14)=Asc(Mid(m,3,1))+(Asc(Mid(m,4,1))*256)") f.WriteLine(vbTab & vbTab & "Xl(15)=Asc(Mid(m,5,1))+(Asc(Mid(m,6,1))*256)") f.WriteLine(vbTab & vbTab & "Xh(15)=Asc(Mid(m,7,1))+(Asc(Mid(m,8,1))*256)") f.WriteLine(vbTab & vbTab & "Md5_Step Xl,Xh,Al,Ah,Bl,Bh,Cl,Ch,Dl,Dh") f.WriteLine(vbTab & "End If") f.WriteLine(vbTab & "If f=True Then") Dim s Dim k Dim l s="" For i=1 To 4 Step 1 k=Mid("ABCD",i,1) For j=1 To 2 Step 1 l=Mid("lh",j,1) If s<>"" Then s=s & " & " s=s & "Chr(" & k & l & " AND 255) & Chr(" & k & l & " \ 256)" Next Next f.WriteLine(vbTab & vbTab & "Md5Count=" & s) f.WriteLine(vbTab & "Else") s="" For i=1 To 4 Step 1 k=Mid("ABCD",i,1) For j=1 To 2 Step 1 l=Mid("lh",j,1) If s<>"" Then s=s & " & " s=s & "Md5OutHexDigit((" & k & l & " AND 240)\16) & Md5OutHexDigit(" & k & l & " AND 15) & Md5OutHexDigit((" & k & l & " AND 61440)\4096) & Md5OutHexDigit((" & k & l & " AND 3840)\256)" Next Next f.WriteLine(vbTab & vbTab & "Md5Count=" & s) f.WriteLine(vbTab & "End If") f.WriteLine("End Function") Sub WriteTestLine(ByRef f,ByRef s) f.WriteLine(vbTab & "s=s & vbCrLf & ""(" & s & ") => "" & Md5Count(""" & s & """,False)") End Sub Sub PrintMd5Test(ByRef f) f.WriteLine("' For test only - remove from real package") f.WriteLine("Sub Md5Test()") f.WriteLine(vbTab & "Dim s") f.WriteLine(vbTab & "s=""Md Test Siute:""") WriteTestLine f,"" WriteTestLine f,"a" WriteTestLine f,"abc" WriteTestLine f,"message digest" WriteTestLine f,"abcdefghijklmnopqrstuvwxyz" WriteTestLine f,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" WriteTestLine f,"12345678901234567890123456789012345678901234567890123456789012345678901234567890" f.WriteLine(vbTab & "MsgBox s,0,""Test""") f.WriteLine("End Sub") f.WriteLine("Md5Test") End Sub ' можно отключить, если не нужно тестирование PrintMd5Test f f.Close() MsgBox "OK",0,"OK" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |