Batch obtenir le md5 d'un fichier ?

Résolu/Fermé
vincsilver Messages postés 36 Date d'inscription lundi 5 décembre 2011 Statut Membre Dernière intervention 22 mai 2015 - 1 mars 2012 à 11:23
 vincsilver - 13 avril 2012 à 11:16
Bonjour,

Est-il possible d'afficher le md5 d'un fichier en batch ?

L'objectif est de lancer l'installation d'une application (ex: setup.exe) appelé par un petit script batch à condition que son md5 soit identique à celui que j'aurai renseigné au préalable.

Peut être avec des "if" ?

Merci par avance de vos réponse.
Vincent

A voir également:

3 réponses

dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
1 mars 2012 à 16:19
Bonjour,

Télécharger le Md5.exe et créer un batch type CMD et mettez le code suivant:

Je l'ai testé avec une bonne signature et une mauvaise et cela est bien détecté.

*************************************


@Echo off

rem Définir dans la variable "md5_value" la signature-md5 du fichier en question rem (sur 32 caractères et en majuscules)
rem Exemple: set md5_value=120B7D0C4A6281F874C9547665A2E5F4

Set md5_value=120B7D0C4A6281F874C9547665A2E5F4


:Process
Md5.exe -c%md5_value% -l %1

If %errorlevel%==1 goto :Erreur


Echo Lancement de l'application....
rem continuer ici le processus car la signature est correcte...... ex: Setup.exe


Goto :FIN




:Erreur
Cls
Echo.
Echo Erreur...!! la signature "%md5_value%" ne correspond pas
Echo pour le fichier : %1
Echo.
Goto :FIN


:FIN
Set md5_value=

****************************************
1
vincsilver Messages postés 36 Date d'inscription lundi 5 décembre 2011 Statut Membre Dernière intervention 22 mai 2015 21
1 mars 2012 à 18:26
Bonjour et merci de ta réponse.

Peux tu m'expliquer les arguments :
"-c" et "-l" dans la ligne : Md5.exe -c%md5_value% -l %1
C = compare ? L = list ?

N'ayant pas vu ton message plutôt j'ai en effet opté pour md5sum.
Par contre ma commande "set" ne fonctionnant pas dans un script avec md5.exe (voir ci-dessous), j'ai du rusé et faire appel à un fichier txt dans lequel j'exporte le résultat de la commande "md5 -n" et ensuite je fais un set /p %mavar% < mon_fichier.txt
set %md5setup% = md5.exe -n c:\temp\setup.exe
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
1 mars 2012 à 19:27
Si tu recopies exactement mon code, cela doit fonctionner.... faire attention au Rem et la présentation dans ce message car dans un batch le texte qui suit un Rem se présente sous la forme :

Rem blablabla.... (on va ensuite à la ligne)
Rem blablabla


La commande set d'une variable DOIT FONCTIONNER...

exemple:
Set md5_value=123456789ABCDEF123456789FEDCBA (ceci sur 32 caractères pour le MD5)

ainsi si tu lances dans une boîte DOS la commande set md5_value tu obtiendras son contenu défini juste au-dessus.

Quand je mets %1 c'est pour récupérer le nom du fichier que tu mets en argument au lancement du batch mais ce n'est pas obligatoire et tu peux le définir en clair dans la ligne de commande du MD5.exe

Supposons que ton batch s'appelle : Test_md5.cmd

On fera abstraction des chemins où sont situés le md5.exe et le fichier à analyser, j'espère que tu sais à ce sujet.

Tout d'abord e renseigne dans le batch, la variable "md5_value" avec la vraie valeur de la signature du fichier à analyser (sur 32 caractères), puis sauvegarde du batch.

Dans une boîte DOS, je saisis (c'est un exemple) :

Test_md5.cmd C:\file_appli\setup.exe (setup.exe étant le fichier à analyser
ici l'argument 1 passé à md5.cmd est le nom du fichier que je récupère dans la variable %1

Voici l'explication des Argments de l'outil md5.exe :

-c comparaison de la signature indiquée ici (après le -c) avec celle calculée par l'exécution de md5.exe

ainsi pour nous :

-c%md5_value% indique la signature de ton fichier à comparer avec celle du fichier qui est passé en argument au batch (par exemple setup.exe)

-l permet de s'affranchir des erreurs de minuscules ou majuscules dans la saisie de la signauture donc ce qui est mis ici dans la variable %md5_value


Maintenant si le %1 te gêne tu peux faire ceci à base de 2 variables à renseigner dans ton batch :

set md5_value=xxxxxxxxxxxx là rien de changé tu définis la signature à comparer
set file_md5=chemin et nom du ficher à analyser et à exécuter par la suite si c'est OK

Ce qui fera:

****************************************************
@Echo off

rem Définir dans la variable "md5_value" la signature-md5 du fichier en question
rem (sur 32 caractères et en majuscules)
rem Exemple: set md5_value=120B7D0C4A6281F874C9547665A2E5F4

Set md5_value=120B7D0C4A6281F874C9547665A2E5F4


Rem Définir le chemin et le nom du fichier à analyser
Rem ci-dessous un exemple à modifier en fonction des besoins

Set file_md5=c:\appli_md5\setup.exe


:Process
Md5.exe -c%md5_value% -l %file_md5%

If %errorlevel%==1 goto :Erreur


Echo Lancement de l'application....
rem continuer ici le processus car la signature est correcte...... ex: Setup.exe
rem on pourra mettre par exemple :

%file_md5%


Goto :FIN




:Erreur
Cls
Echo.
Echo Erreur...!! la signature "%md5_value%" ne correspond pas
Echo pour le fichier : %file_md5%
Echo.
Goto :FIN


:FIN -On quitte et on remet à 0 les 2 variables
Set md5_value=
Set file_md5=


*******************************************************

Pourquoi 2 variables: il est beaucoup plus simple dans un code de modifier 2 variables en début de script plutôt que d'adapter les lignes à l'intérieur ( parfois on en oublie..) et faire des erreurs de saisies.... et après on s'énerve.

Voilà, avec tout ça, cela doit fonctionner...... donc facile à intégrer dans un script.
0
vincsilver Messages postés 36 Date d'inscription lundi 5 décembre 2011 Statut Membre Dernière intervention 22 mai 2015 21
2 mars 2012 à 10:00
Merci pour ces informations complémentaires.
Pas de problème, ton script fonctionne bien. Je ne connaissais pas l'option "-c" de md5.exe.

Par contre j'ai remarqué que si le md5 était erroné. Du genre, codé sur 33 caractères au lieu de 32, le setup se lance quand même.
Voici le message d'erreur:
"Error in signature specification. Must be 32 hex digits."

Bon après il est vrai que je ne sais pas s'il est possible d'avoir un setup.exe avec un md5 de 33 caractères...

PS : dans ton script, à la ligne : "If %errorlevel%==1 goto :Erreur"
--> il ne faut pas mettre le ":" devant Erreur

Cdlt,
Vincent
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
2 mars 2012 à 10:46
Bonjour,

Pour te faire plaisir voici la dernière mouture qui prend en compte le traitement d'une signature ne comportant pas 32 caractères ou n'étant pas définie en Hexa. Pour ton info, la signature d'un fichier sera toujours de 32 caractères quelque soit le fichier ou sa taille (bien sûr si calculée avec l'outil MD5). Par exemple si on retrouve une lettre autre que de A à F, MD5 considère qu'il manque 1 caractère et cela sera détecté. A fortiori s'il n'y a que 30 caractères cela sera aussi détecté.

Voici un exemple qui fonctionne "nickel" (à la virgule près...). En fait j'ai renseigné une signature d'un film AVI et si elle est correcte dans le process, le film se lance automatiquement.

J'ai ajouté une Pause dans le traitement des erreurs en cas de lancement direct du batch par l'explorateur Windows et sans passer par une boîte DOS sinon on ne voit pas l'erreur...)..


***************************************************
@Echo off

rem Définir dans la variable "md5_value" la signature-md5 du fichier en question
rem (sur 32 caractères et en majuscules de préférence)
rem Exemple: set md5_value=120B7D0C4A6281F874C9547665A2E5F4

Set md5_value=120B7D0C4A6281F874C9547665A2E5F4


Rem Définir le chemin et le nom du fichier à analyser
Rem ci-dessous un exemple à modifier en fonction des besoins

Set file_md5=c:\Users\Dom\downloads\ayur.avi


:Process
Md5.exe -c%md5_value% -l %file_md5%

If %errorlevel%==2 goto :Erreur2
If %errorlevel%==1 goto :Erreur1


Echo Lancement de l'application....
rem continuer ici le processus car la signature est correcte...... ex: Setup.exe
rem on pourra mettre par exemple :

%file_md5%


Goto :FIN


:Erreur2
Cls
Echo.
Echo Erreur...!! la signature mise dans la variable "md5_value"
Echo ne comporte pas 32 caracteres ou n'est pas en Hexadecimal
Echo (uniquement avec des 0-9 et des A-F).
Echo ** Contenu de la variable : %md5_value%
Echo.
Pause
Goto :FIN


:Erreur1
Cls
Echo.
Echo Erreur...!! la signature "%md5_value%" ne correspond pas
Echo pour le fichier : %file_md5%
Echo.
Pause
Goto :FIN


:FIN *-*-*- On quitte et on remet à 0 les 2 variables
Set md5_value=
Set file_md5=



********************************************************

Quant aux : devant une étiquette de Goto cela doit fonctionner (mais effectivement ce n'est pas obligatoire dans le code).

Ex. qui doit fonctionner:

If ............. Goto :Erreur
.........
.........


:Erreur

*******************************

Mais ci-dessous, c'est aussi valable

If ............. Goto Erreur
.........
.........


:Erreur

************************************

Perso, je préfère mettre les : devant car le code est plus lisible.... (question d'appréciation).


Voilà, bon courage pour la suite et n'oublie pas de fermer le sujet.
0
vincsilver Messages postés 36 Date d'inscription lundi 5 décembre 2011 Statut Membre Dernière intervention 22 mai 2015 21
2 mars 2012 à 12:17
Sympa ton script. Là il est vraiment complet :)
Un grand merci.
Il ne me reste plus qu'a compiler mon batch en .exe afin d'avoir une exécution invisible.

PS : Étonnement la commande suivante fonctionne lorsqu'elle est entrée manuellement dans une invit de commande :
########################
C:\Windows\System32>set md5=md5.exe -n D:\documents\Vincent\Desktop\launcher\setup.exe

C:\Windows\System32>%md5%
7ABC3D1169204F71F9C9B20A33E6B7EB
########################

Par contre lorsque la même commande est mise dans un script.bat, la valeur de %md5% retourné n'est plus "7ABC3D1169204F71F9C9B20A33E6B7EB" mais :
########################
C:\Windows\System32>%md5%
md5.exe -n D:\documents\Vincent\Desktop\launcher\setup.exe
########################

Peut être un problème de valeur de chaine ? (string, system,etc ?)
0
vincsilver Messages postés 36 Date d'inscription lundi 5 décembre 2011 Statut Membre Dernière intervention 22 mai 2015 21
1 mars 2012 à 18:10
Après plusieurs recherche, je ne pense pas que ce soit possible avec seulement le langage batch.
J'ai donc intégré l'outil md5.exe dans mon script.
0
Bonjour,

Est-il possible d'obtenir le hash d'un texte grâce au Batch ? Je voudrais pouvoir créer le hash du maximum de combinaisons possibles pour créer une très grosse base de donnée...

Merci d'avance
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
10 avril 2012 à 19:18
Bonsoir,

Je ne pense pas avoir bien compris le sens de votre question, mais pour rappel l'outil "Md5.exe" permet de calculer la signature d'un fichier sous la forme d'une chaîne de 32 caractères en hexadécimal (c'est ce qu'on appelle le calcul de l'intégrité d'un fichier) et ceci quelque soit le type de fichier à analyser par Md5 (que ce soit un exe, un PDF, un DOC, un XLS ou du texte ou tout autre fichier....). Cet outil ne peut fonctionner qu'en mode commandes (donc a fortiori dans un batch). La signature sera toujours de 32 caractères quelque soit la taille du fichier. En revanche, il faut que ce soit un fichier et non pas une chaîne de caractères quipourrait être passée en argument à Md5.
Il est possible que la taille du fichier à analyser soit limité en taille...!!! à vérifier... mais j'ai fait un test avec un fichier d'un giga et cela fonctionne (cela demande quand même quelques secondes avant d'avoir le résultat).


Voilà, je ne sais pas si j'ai fait avancer "la chose".

Cdlt.
0
Bonjour,

Si ton texte est dans un fichier .txt ou .doc ou .xls, etc.. pas de problème avec md5.exe tu obtiendra une signature md5 (hash) différente a chaque fois que tu changeras le contenu de ton fichier.

Cdlt,
vincent
0