Spirit Of Hack

#SoH on irc.geeknode.org

Vous n'êtes pas identifié.

Annonce

Ouverture du wiki SoH, Contactez-nous pour toute remarque :)

#1 09/04/2009 09:47:29

D4rkc3n
Membre
Date d'inscription: 11/01/2008
Messages: 15

comparateur de hash md5

Salut

Hier je me suis motivé à coder un petit peu histoire d'apprendre car si on ne pratique pas on avance pas.donc voici ma source les critiques argumenté sont bienvenu

Code:

#!/usr/bin/perl


use strict;
use warnings;
use Digest::MD5;

my $file;
my @lines;
my $lg;
my $i= -1;
my $hashmd5;
my $md5;
my $digest;
my $j= 0;
my $lgmd5;


print "nom du dico\n";

$file = <STDIN>;
chomp($file);

#verification de l'existance du fichier

if( -e "$file"){
        print "le fichier existe\n";
        }

#Ouverture et lecture du fichier

open(DICO,$file);
@lines=<DICO>;
close(DICO);
chomp(@lines);

#Fermeture du fichier

#Nombres de mots dans le fichier
$lg = (@lines);
print "Ce fichier contient $lg mots\n";

#Entrer du hash
print "Entrez le hash md5 à trouver\n";
$hashmd5=<STDIN>;
chomp($hashmd5);
$lgmd5=length($hashmd5);

#Verification du hash

if($lgmd5 != 32)
    {
        print "Ce hash => $hashmd5 <=  n'est pas correcte il doit contenir 32 caracteres\n";
    }else{
        print "Ce hash => $hashmd5 <= est correcte\n .................. \n";

#Creation des hash et comparaison avec celui entré

while($j <= $lg){

        $md5 = Digest::MD5->new;
        $md5->add($lines[$i]);
        $digest = $md5->hexdigest;
        
        if($digest eq $hashmd5){
                
                print "\nOrigine du hash ===>$lines[$i]<===\n\n";
                exit 0;
        }else{
                print "hash $i $digest\n";
            }
$i++;
$j++;    
}

}

Dernière modification par D4rkc3n (09/04/2009 09:49:38)

Hors ligne

#2 09/04/2009 18:15:23

berga
Administrator
Date d'inscription: 10/01/2008
Messages: 221
Site web

Re: comparateur de hash md5

Attention, si cette comparaison est utilisée à des fins de sécurité, alors md5 n'est pas l'algorithme à utiliser !

Il a été démontré, et les outils ont été développé, qu'il est possible de créer un fichier md5-ment semblable à un autre.

Il est donc grand temps de se diriger vers des algorithmes encore intégres, comme SHA par exemple :]


Toute science est essentiellement un moyen vers un but.
Le moyen est la connaissance, le but est le contrôle.
Au delà de ceci demeure une seule question: Qui sera le bénéficiaire?

Hors ligne

#3 09/04/2009 19:10:02

Gutek
Humaniste & Compréhensif
Lieu: Rent-a-modo. Tax free.
Date d'inscription: 11/01/2008
Messages: 358
Site web

Re: comparateur de hash md5

c'est basic, mais on peut remarquer quelques trucs.

Pourquoi ne pas "suber" un peu ? il y a plusieurs étapes, ca serait peut être plus clair d'en faire des fonctions.
- tu demandes de lire un fichier dictionnaire. Tu devrais plutot dans une fonction demander un chemin vers un repertoire qui contient DES dicos. Tu charges et concatène les différents dicos que l'utilisateur n'aura plus qu'a copier dans son répertoire dédié aux dicos.
- tu check la validité du hash recherché. La encore, fonction, et plus complète du coup : après avoir check la longueur, check aussi les caractères utilisés. Mets ta chaine en majuscules, c'est plus propre, et rajoute donc une regex qui va verifier sur [A-F0-9]. Simple, et tu es sûr de ton coup.

Le while qui tourne sur le nombre de mots, c'est pas très propre (question de gout sans doute). A la place, pourquoi pas un

Code:

foreach $mot_en_clair (@lines) {
                                               ton $mot_en_clair en MD5;
                                               ton test comparatif $MD5_mot_en_clair / $hashmd5;
                                              }

-[Key ID : 0xED216BB8
-[Key fingerprint : B39169BDA010EB3B9B497B5EDDA0D34CED216BB8

Hors ligne

#4 10/04/2009 11:48:31

D4rkc3n
Membre
Date d'inscription: 11/01/2008
Messages: 15

Re: comparateur de hash md5

Effectivement un foreach est beaucoup plus adapté et fonctionne tout aussi bien,

je me met sur le répertoire et la concaténation des dicos.

Merci

Dernière modification par D4rkc3n (10/04/2009 11:50:00)

Hors ligne

#5 10/04/2009 12:32:32

Gutek
Humaniste & Compréhensif
Lieu: Rent-a-modo. Tax free.
Date d'inscription: 11/01/2008
Messages: 358
Site web

Re: comparateur de hash md5

au sujet de la concatenation, ca n'a de sens que selon la strategie adoptée. En effet, on peut imaginer par exemple une facon de travailler qui consiste a posséder divers dicos complets de langues (des fichiers de plusieurs Mo, donc), ce que la plupart des gens font.
Dans ce cas la concatenation est mal adaptée, parceque ca va donner un truc énorme en mémoire et ca va couter cher en ressources pour le parsing. Ca va etre lent, au final.
Une autre facon de travailler consiste à utiliser des petits dictionnaires de mots ciblés (des users, des credentials très courants comme "admin", ce genre de choses). La ca prend du sens parcequ'on va travailler sur un seul fichier plutot que d'appeller plein de petits morceaux.

Un bon compromis serait peut être de s'adapter en fonction de la taille des fichiers présents dans le répertoire : tous ceux de moins de 100Ko, concatène dans @petits_fichiers; Les autres, laisser : il feront l'objet chacun d'une boucle open/close.


-[Key ID : 0xED216BB8
-[Key fingerprint : B39169BDA010EB3B9B497B5EDDA0D34CED216BB8

Hors ligne

Pied de page des forums

© Copyright 2002–2005 Rickard Andersson