Nog makkelijker: Gebruik
CapiCom.
Visual Basic:
1
2
3
4
5
6
| Dim oCrypt
Set oCrypt = Server.CreateObject("CAPICOM.HashedData")
oCrypt.Algorithm = 3 'CAPICOM_HASH_ALGORITHM_MD5
oCrypt.Hash "test"
MsgBox "MD5:" & oCrypt.Value
Set oCrypt = Nothing |
Voor "test" neem je dan een variabele:
Visual Basic:
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
| Dim MyVar as string
Dim FF as integer
Dim oCrypt
'Bestand inlezen
'============
'Vrije file handle
FF = FreeFile
'Bestand openen
Open "C:\MyFile.gif" for binary as #FF
'String initialiseren op lengte van het bestand
MyVar = String(Lof(FF),Chr(0))
'Bestand in string lezen
Get #FF,,MyVar
'File handle vrij geven
Close #FF
'CAPICOM objectje maken
Set oCrypt = Server.CreateObject("CAPICOM.HashedData")
'MD5 instellen
oCrypt.Algorithm = 3 'CAPICOM_HASH_ALGORITHM_MD5
'Je string hashen
oCrypt.Hash MyVar
'MD5 weergeven
MsgBox "MD5:" & oCrypt.Value
'Object releasen
Set oCrypt = Nothing |
Effe uit de losse pols, maar this should do the trick.
Volgens mij kent CapiCom geen HashFile() ofzo als ik me goed herinner, dus moet het (helaas) zo.
Zie ook
http://msdn.microsoft.com...ity/capicom_reference.asp

Maar 2 bestanden vergelijken kan natuurlijk ook.
Pseudo code:
Bestandsgroottte gelijk? Zo nee, bestanden niet gelijk (return ongelijk)
Open bestand a en b
Loop door a en b. Als byte a(x) <> b(x) exit lus en return ongelijk
Sluit bestand a en b
Wil je (kleine!) bestanden snel vergelijken:
Visual Basic:
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
| Dim MyVar(1) as string
Dim FF(1) as integer
'Bestanden inlezen
'============
'Vrije file handles
FF(0) = FreeFile
FF(1) = FreeFile
'Bestanden openen
Open "C:\MyFileA.gif" for binary as #FF(0)
Open "C:\MyFileB.gif" for binary as #FF(1)
If Lof(FF(0)) = Lof(FF(1)) then
'Strings initialiseren op lengte van de bestanden
MyVar(0) = String(Lof(FF(0)),Chr(0))
MyVar(1) = String(Lof(FF(1)),Chr(0))
'Bestanden in string lezen
Get #FF(0),,MyVar(0)
Get #FF(1),,MyVar(1)
'Files comparen
'============
MsgBox "Result: " & Strcomp(MyVar(0),MyVar(1)) 'Zie StrComp in de MSDN voor info
Else
MsgBox "Filesize verschillend"
End if
'File handles vrij geven
Close #FF(0)
Close #FF(1) |
Zoiets (wederom uit de losse pols). Voor grote bestanden (zeg 4+ Mb) zou ik het anders doen en wellicht gewoon CapiCom gebruiken. Da's altijd sneller dan zelf "byte voor byte" door het bestand gaan lopen...

En natuurlijk zijn er zat algoritmes die dit efficiënter doen... denk ik
[
Voor 255% gewijzigd door
RobIII op 22-02-2005 00:10
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij