Page 1 sur 1
[R] Erreur de calcul MD5 et SHA-1
Posté : sam. 18 janv. 2014 19:29
par labougie
Bonjour,
J'utilise MD5.Au3 et Sha-1.Au3 pour extraire les valeurs.
Les valeurs sortent bien dans mon logfile mais elles sont fausses.
Je m'explique:
j'ai comparé les valeurs d'un même fichier avec mon outil et avec HashTab.
Voici pour le notepad sous Hash Tab
CRC32: E0236273
MD5: 22E1963FE26D5BCEAB0575EB6FF60CB5
SHA-1: C23F9CF64FE79305B8233C937DA0EB05464F8396
Et avec mon outil
26/07/2012 à 02:16:32 A c:\Windows\notepad.exe (233984) [MD5 92E90AF168A8204A5B7FA29406DF0AC5 ]
26/07/2012 à 02:16:32 A c:\Windows\notepad.exe (233984) [SHA-1 8324257E3E01A71338CB9981E35E9D502125076F ]
Je pense que hashtab est dans le vrai
Comment procéder pour solutionner ce problème de calcul ?
Le script est sur
ce topic
Labougie
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : sam. 18 janv. 2014 22:00
par jguinch
Où as-tu trouver ces UDF ?
Regardes
iciet test cet UDF. Je l'ai déjà utilisé pour MD5 et ça me donne le même résultat que la fonction MD5 en PHP, donc je pense que c'est plutôt fiable.
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 03:28
par labougie
Bien le bonjour,
C'est le lien que j'ai utilisé.
biztrange l'affaire.
labougie
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 08:48
par jguinch
Dans l'archive que tu as téléchargé, il y a MD5FileTest.au3, est-ce que tu t'es basé là-dessus pour ton script ?
Si non, pars sur cette base.
Si oui, .... biztrange en effet.. Poste ton code, peut-être que quelque chose t'a échappé ?
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 12:27
par labougie
Bonjour jguinch,
Je suis parti du script que tu indiques.
Regarde la capture ci-dessous.
Un test avec MD5FileTest et Hash tab pour avoir une bonne comparaison
► Afficher le texte
Code : Tout sélectionner
; variables déclarées
Global $BufferSize = 0x20000
Global $Hashmd5, $_SHA1CodeBuffer, $Hashsha1
Global $_MD5CodeBuffer ; cette variable doit être déclarée sinon il ressort l'udf MD5.Au3 avec une erreur, du coup déclarée dans mon script et dans l'udf
;_ArrayDisplay($Recherche, "Liste fichier")
If IsArray($Recherche) Then
For $k = 1 to $Recherche[0] ; parcourt le tableau
$size = fileGetSize($Recherche[$k]) ; récupération de la taille du fichier
$create = FileGetTime($Recherche[$k],1,0) ; mise sous forme de tableau de la date et heure de création du fichier
$sAttribute = FileGetAttrib($Recherche[$k]) ; attibut du dit fichier
;calcul du md5
If _IsChecked($checkmd5) = 1 then
Guictrlsetstate($checkmd5,$GUI_CHECKED)
Global $Timer = TimerInit()
Global $FileHandle = FileOpen($recherche[$k], 16)
$MD5CTX = _MD5Init()
For $i = 1 To Ceiling(FileGetSize($recherche[$k]) / $BufferSize)
_MD5Input($MD5CTX, FileRead($recherche[$k], $BufferSize))
Next
$Hashmd5 = _MD5Result($MD5CTX)
$Hashmd5 = StringTrimLeft($Hashmd5, 2) ; suppression des 2 premiers caractères du hash à savoir "0x"
FileClose($recherche[$k])
FileWriteLine($LogFile,$create[2] & "/" & $create[1] & "/" & $create[0] & _
" à " & $create[3] & ":" & $create[4] & ":" & $create[5] & " " & $sAttribute & " " & " "& $Recherche[$k] & " (" & $size & ")" & " " & "[MD5 " & $Hashmd5 & " ]" )
Else
FileWriteLine($LogFile,$create[2] & "/" & $create[1] & "/" & $create[0] & _
" à " & $create[3] & ":" & $create[4] & ":" & $create[5] & " " & $sAttribute & " " & " "& $Recherche[$k] & " (" & $size & ")")
EndIf
;calucul du SHA-1
If _IsChecked($SHA1) = 1 then
Guictrlsetstate($SHA1,$GUI_CHECKED)
$SHA1CTX = _SHA1Init()
For $m = 1 To Ceiling(FileGetSize($recherche[$k]) / $BufferSize)
_SHA1Input($SHA1CTX, FileRead($recherche[$k], $BufferSize))
Next
$Hashsha1 = _SHA1Result($SHA1CTX)
$Hashsha1 = StringTrimLeft($Hashsha1, 2) ; suppression des 2 primers caractères du hash à savoir "0x"
FileClose($recherche[$k])
FileWriteLine($LogFile,$create[2] & "/" & $create[1] & "/" & $create[0] & _
" à " & $create[3] & ":" & $create[4] & ":" & $create[5] & " " & $sAttribute & " " & " "& $Recherche[$k] & " (" & $size & ")" & " " & "[SHA-1 " & $Hashsha1 & " ]" )
Else
FileWriteLine($LogFile,$create[2] & "/" & $create[1] & "/" & $create[0] & _
" à " & $create[3] & ":" & $create[4] & ":" & $create[5] & " " & $sAttribute & " " & " "& $Recherche[$k] & " (" & $size & ")")
EndIf
Next
EndIf
labougie
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 14:42
par jguinch
Si
MD5FileTest.au3 d'origine ne te donne pas la bonne valeur, c'est bien qu'il y a quelque chose qui cloche...
Tu es sur du Windows 8, peut-être qu'il y a un truc spécifique... ? Tu devrais poser la question sur le forum US, dans le topic d'origine.
Si quelqu'un peut tester sur un Windows 8 (j'en n'ai pas sous la main) ?
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 15:40
par matwachich
Euh... pourquoi faire simple quand on peut faire compliquer
Code : Tout sélectionner
#include <crypt.au3>
_Crypt_HashFile("fichier.test" $CALG_MD5)
_Crypt_HashFile("fichier.test" $CALG_SHA1)
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 18:09
par jguinch
Ah oui là, c'est nettement plus simple ...

Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 18:45
par labougie
L'udf choisi fonctionne est j'ai trouvé une partie de l'erreur.
► Afficher le texte
Code : Tout sélectionner
If _IsChecked($checkmd5) = 1 then
Guictrlsetstate($checkmd5,$GUI_CHECKED)
Global $Timer = TimerInit()
Global $FileHandle = FileOpen($recherche[$k], 16)
$MD5CTX = _MD5Init()
For $i = 1 To Ceiling(FileGetSize($recherche[$k]) / $BufferSize)
_MD5Input($MD5CTX, FileRead($FileHandle, $BufferSize))
Next
$Hash = _MD5Result($MD5CTX)
$Hash = StringTrimLeft($Hash, 2) ; suppression des 2 premiers caractères du hash à savoir "0x"
FileClose($FileHandle)
[/spoiler]
J'avais remplacé $filehandle par $recherche[$k]
c'est tant mieux, pour le md5 mais cela n'a fonctionné qu'une fois, ensuite cette erreur sort dans MD5.Au3 comme ceci.
j'ai beau déclarer cette variable dans md5.au3 est dans le script c'est que néni.
==================
Pour le scde méthode proposée, je gatouille
labougie
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : dim. 19 janv. 2014 21:11
par Tlem
Bonsoir labougie.
Pour un de mes outils, j'ai utilisé le même UDF MD5 que vous, mais au final, je l'ai remplacé par deux autres solutions bien plus rapides :
- 1 - Utilisation du programme externe md5.exe qui est au moins deux fois plus rapide. Ce qui est bien plus intéressent pour des très gros fichiers comme des ISO de DVD ou des fichiers de machines virtuelles.

2 - Et au cas ou l'utilisation du programme externe échouerait, j'utilise le code en pur AutoIt ci-dessous :
► Afficher le texte
Code : Tout sélectionner
#include <Crypt.au3>
$FileName = "MonFichier.Iso"
_Crypt_Startup()
$Hash = MD5($Filename)
_Crypt_Shutdown()
MsgBox(32, "MD5", "Le MD5 du fichier " & $Filename & " est :" & @CRLF & $Hash)
Func MD5($FileToHash)
Local $Timer = TimerInit()
Local $filehandle = FileOpen($FileToHash, 16)
Local $buffersize = 0x20000, $final = 0, $Hash = ""
Local $iterations = Ceiling(FileGetSize($FileToHash) / $buffersize)
ProgressOn("Calcul MD5", "Fichier " & $FileToHash, "0 %", -1, -1, 16)
For $i = 1 To $iterations
If $i = $iterations Then $final = 1
$Hash = _Crypt_HashData(FileRead($filehandle, $buffersize), $CALG_MD5, $final, $Hash)
Local $percent_md5 = Round(100 * $i / $iterations)
ProgressSet($percent_md5, $percent_md5 & " %")
Next
FileClose($filehandle)
ProgressSet(100, "100%", "Calcul MD5 terminé")
ProgressOff()
Return StringTrimLeft($Hash, 2)
EndFunc ;==>MD5
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : sam. 25 janv. 2014 11:40
par labougie
Bonjour Tous,
J'ai tout repris à zéro.
Redézippé le fichier contenant les versions md5 sha-1 etc...
J'ai repris donc les fichiers md5 et sha-1 .AU3 pour les intégrer dans mon script
Il a fallu donner une déclaration de variable à $md5codebuffer en global dans les Udf md5 et sha-1
Tout est rentré dans l'ordre, c'est biztrange quand même, car j'avais réalisé ces étapes dés la première fois.
Le but est que les calculs soient justes.
====
Thierry,
j'aimerais bien travailler sur votre solution proposée, à savoir Md5.exe
Etant encore profane, comment intégrer un exécutable dans le script Autoit?
Est-ce une piste que d'écrire
shellexecute (path /md5.exe) + ordre(s) de commande (en fonction de ce que l'on souhaite obtenir)
si c'est une partie de la solution, alors ensuite se pose le pb de comment faire suivre md5.exe avec le script compilé
labougie
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : sam. 25 janv. 2014 15:17
par Tlem
Bonjour labougie.
Ma méthode consiste à utiliser
FileInstall() pour intégrer MD5.exe dans mon script. Ensuite, au moment opportun, j'utilise cette commande pour extraire MD5.exe dans le dossier temporaire de l'utilisateur.
Et effectivement j'utilise une simple ligne de commande :
Code : Tout sélectionner
; $Filename est la variable contenant le chemin et le nom du fichier à traiter.
; $AppName est le nom de mon application.
Local $sShortName = FileGetShortName($Filename)
Local $TmpFile = @TempDir & "\" & $AppName & ".md5"
$Ret = RunWait(@ComSpec & " /c " & @TempDir & '\md5.exe -l -n -o"' & $TmpFile & '" "' & $sShortName, @TempDir, @SW_HIDE)
Ensuite, je lit le fichier temporaire contenant le Hash :
et pour finir, je fait le reste de mon traitement.

Re: [..] Erreur de calcul MD5 et SHA-1
Posté : jeu. 06 févr. 2014 11:11
par labougie
Bonjour Thierry,
Je suis pris par le temps.
Je garde sous le coude ce post, et j'y reviendrais afin de mieux comprendre ce rouage d'insertion .exe
cordialement,
Labougie
Ps,
dois-je mettre en résolu même si nous avons un peu dévié de l'idée originale?
Re: [..] Erreur de calcul MD5 et SHA-1
Posté : ven. 07 févr. 2014 01:40
par Tlem
Si l'ensemble de cette discussion vous apporte la réponse à vos intérrogations, alors oui ce sujet peux être considéré comme résolu.
Re: [R] Erreur de calcul MD5 et SHA-1
Posté : sam. 08 févr. 2014 12:26
par labougie
Bonjour Thierry,
J'ai classé en résolu.
J'ouvrirai un autre topic concernant l'utilisation d'un exe externe à autoit quand je disposerai davantage de temps.
labougie