Toon posts:

[VB6] Vergelijking .gif d.m.v Md5 Hash

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een programma om 2 plaatjes te vergelijken en als ze precies overeen komen dat er dan een value bijv. true komt uitrollen.

Ik wil dit realizeren door van beide .gifs de md5 hash te vergelijken..
alleen ik heb geen idee of het mogelijk is de md5 hash van een plaatje in Vb te krijgen.
heeft iemand hier ervaring mee of kan iemand me tips geven ?

ik heb wel gezocht en gevonden hoe je een normale string in md5 omzet maar daar heb ik niets aan.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-05 22:46

Janoz

Moderator Devschuur®

!litemod

Waarom zou een md5 algoritme dat als input een string heeft, wat in principe gewoon een rij bytes is, moeten verschillen van een gif plaatje, wat in principe gewoon een rij bytes is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
ik moet kunnen aantonen of 2 ingevoerde plaatjes hetzelfde zijn of niet

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 13-05 11:32

Koppensneller

winterrrrrr

Wat Janoz bedoelt is: waarom zou je de MD5 hashes gaan vergelijken als je ook gewoon de plaatjes (bit voor bit) kunt vergelijken?

Verwijderd

Topicstarter
zou ook kunnen, maar is dat niet heel veel gedoe in VB6 ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-05 22:46

Janoz

Moderator Devschuur®

!litemod

Wat ik bedoel is eigenlijk dat het natuurlijk weinig uitmaakt of je een string of andere data als input hebt, maar inderdaad is het natuurlijk ook een beetje onzin om de complete data van beide plaatjes door te nemen om een md5 er van te maken en deze te vergelijken terwijl je natuurlijk ook rechtstreeks kunt kijken of de data gelijk is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
ja eigelijk best dom }:O

alleen heb ik niet echt een idee om VB 2 bestanden te laten omzetten naar bytes

Verwijderd

Er zal toch wel een open functie en een [url=rhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vamthopenastextstream.asp]read functie[/url] in VB zitten?

[ Voor 64% gewijzigd door Verwijderd op 21-02-2005 23:07 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
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

:X 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... :Y)
En natuurlijk zijn er zat algoritmes die dit efficiënter doen... denk ik :P

[ 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


  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Hoewel niet helemaal ontopic, kijk ook eens naar VB.net, de hashfuncties zitten ingebakken, betere support voor werken met plaatjes (GDI+) .... dat kan je een hoop tijd schelen!

Verwijderd

Eerst de grootte van de bestanden vergelijken in sowieso een stuk efficienter. Om een MD5 te maken moeten ook alle bytes gelezen worden, dus dat zal niet veel sneller gaan dan byte-voor-byte vergelijken. Probeer het, dan weet je het.

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 11-05 08:55

sopsop

[v] [;,,;] [v]

Er zijn ook componentjes om het histogram uit images te trekken.

Voordeel daar van is, is dat je ook bestanden van een verschillend formaat met elkaar kan vergelijken (tot op zekere hoogte).
Pagina: 1