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
vincsilver - 13 avril 2012 à 11:16
A voir également:
- Batch obtenir le md5 d'un fichier ?
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
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
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=
****************************************
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=
****************************************
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
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.
J'ai donc intégré l'outil md5.exe dans mon script.
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
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
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
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.
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.
1 mars 2012 à 18:26
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
1 mars 2012 à 19:27
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.
2 mars 2012 à 10:00
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
2 mars 2012 à 10:46
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.
2 mars 2012 à 12:17
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 ?)