MD5 CLASS - PURE VB6 IMPLEMENTATION

Signaler
Messages postés
27
Date d'inscription
vendredi 18 octobre 2002
Statut
Membre
Dernière intervention
2 août 2007
-
Messages postés
308
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24964-md5-class-pure-vb6-implementation

Messages postés
308
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
Je reviens avec question. Je n'ai pas réussis à ajouter l'implémentation de ta source pour calculer MD5 d'un fichier.

Sur une autre source, la procédure permettant de retourner le hash md5 est le code ci-dessous, mais je n'ai pas réussis à l'adapter pour ton code. Merci de nous indiquer comment calculer le hash MD5 d'un fichier avec ta source.

' fonction publique d'une autre source qui retourne le MD5 d'un fichier.
Public Function DigestFileToHexStr(Filename As String) As String
Dim fic As Integer
Dim k As Long
fic = FreeFile()
Open Filename For Binary Access Read As #fic
MD5Init
Do While Not EOF(fic)
Get #fic, , ByteBuffer
If Loc(fic) < LOF(fic) Then
ByteCounter = ByteCounter + 64
MD5Transform ByteBuffer
End If
k = k + 1
RaiseEvent InProgress(k)
Loop
ByteCounter = ByteCounter + (LOF(fic) Mod 64)
Close #fic
MD5Final
DigestFileToHexStr = LongToHex(State(1)) & LongToHex(State(2)) & LongToHex(State(3)) & LongToHex(State(4))
End Function

Je pose cette question, car l'autre source n'est pas complète. Le MD5 calculé est mauvais pour les fichiers supérieurs à 50 Mo.
Messages postés
308
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
Bravo pour avoir réalisé le portage et merci.
Messages postés
34
Date d'inscription
samedi 3 juin 2006
Statut
Membre
Dernière intervention
23 avril 2011

Cela m'a pris quelques heures pour debuger ce program and trouver pourquoi il crashait le Ide de Vb6.

il semblait evident que le probleme provenait d'une corruption memoire parce que le programme crashait a l'unload event.

le probleme vient de cette ligne:
Call MD5_zeromem(m_context, 98)

Il y a 2 facon de faire cela de la bonne facons:
1. Sans utiliser de function externe:
declare:
Private ZeroMem As TMD5Context

et a la place de:
'Call MD5_zeromem(m_context, 98)
tu met:
m_context = ZeroMem

maintenant,.... si tu insistes vraiment pour utiliser MD5_zeromem().
NE JAMAIS... JAMAIS utiliser de valeurs hardcoded dans une function externe en passant un parametre definie par l'utilisateur. C'est du suicide.

ceci fonctionne:
Call MD5_zeromem(m_context, len(m_context))

et si vous savez comment calculer ceci,
m_context est 88 bytes de long, pas 98.

TMD5Context est definit comme suit:
Private Type TMD5Context
State(0 To 3) As Long ' 4 array * long (4 bytes)=16
Count(0 To 1) As Long ' 2 array * long (4 bytes)= 8
Buffer(0 To 63) As Byte '64 array * byte (1 byte) =64
End Type
64+8+16 =88

merci pour la source, j'ai eu du plaisir.
Messages postés
153
Date d'inscription
vendredi 9 août 2002
Statut
Membre
Dernière intervention
18 septembre 2009

Joli travail, mais dans mon appli, j'ai un problème ca ne semble pas venir de MD5, mais je demande quand même puisqu'il n'est là que depuis que j'ai mis le md5...
Quand je termine mon application avec le mot-clé End, mon appli continue de tourner dans VB...
Ensuite, quand je compile et que j'exécute mon programme, il plante dans une sub où j'utilise le md5... ("a.exe a rencontré un problème et doit fermer"...)
Messages postés
27
Date d'inscription
vendredi 18 octobre 2002
Statut
Membre
Dernière intervention
2 août 2007

Joli travail, je vais tester.
J'avais recupere MD5 et SHA256 sur un site americain en VB6 si tu veux.