IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Comparaison signature MD5


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Comparaison signature MD5
    Bonjour tout le monde



    Voilà je cherche à faire un système de mises à jour via un fichier XML avec signatures MD5/SHA256.



    Je possède un fichier XML qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
      <patch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="patch.xsd">
    	<Entry url="URL" local="C:\dossier\fichier1.txt" SHA256="SHA"/> #1 fichier
    	<Entry url="URL" local="C:\dossier\test\fichier2.txt" SHA256="SHA"/> #2 fichier
    	<Entry url="URL" local="C:\dossier\test\fichier3.txt" SHA256="SHA"/> #3 fichier
    	<Entry url="URL" local="C:\dossier\test\fichier4.txt" SHA256="SHA"/> #4 fichier
    	<Entry url="URL" local="C:\dossier\test\fichier5.txt" SHA256="SHA"/> #5 fichier
      </patch>
    Je voudrai tout simplement comparer les signatures MD5 de 5 fichiers présent sur mon PC à celles présentes dans mon fichier XML.



    Je parvient facilement à récupérer les signatures de mes fichiers en local. Mais je bloque un peut pour vérifier un à un les fichiers puis télécharger le nouveau fichier si la signature est différente.



    J'espère que j'ai été assez précis





    Merci à vous et bonne soirée/journée

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Déjà tu peux faire un MD5 de tous les contenus de fichier de ton dossier pour voir si y a un changement à faire.
    Après si y a changement là tu peux prendre le MD5 de chaque fichier et comparer.
    Le nombre de fichier, les noms des fichiers avant : Si tu charges tous les fichiers d'un dossier la personne peut trouver une faille, si tu prends sur les noms tu peux avoir des fichiers introuvables s'il en supprime.
    Et après tu vérifies le contenu.
    Cela dépend comment tu t'y prends, si tu fais via UDP/TCP ou par HTTP, faudrait plus d'information sur le fonctionnement de ton application.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Kangourex Voir le message
    Déjà tu peux faire un MD5 de tous les contenus de fichier de ton dossier pour voir si y a un changement à faire.
    Après si y a changement là tu peux prendre le MD5 de chaque fichier et comparer.
    Le nombre de fichier, les noms des fichiers avant : Si tu charges tous les fichiers d'un dossier la personne peut trouver une faille, si tu prends sur les noms tu peux avoir des fichiers introuvables s'il en supprime.
    Et après tu vérifies le contenu.
    Cela dépend comment tu t'y prends, si tu fais via UDP/TCP ou par HTTP, faudrait plus d'information sur le fonctionnement de ton application.
    Merci d'avoir répondu !

    En réalité je dispose de plusieurs milliers de fichiers sur mon espace FTP. Tout ces fichiers sont répertoriés dans un fichier XML, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Entry url="www.site.com/update/test.exe" local="C:\dossier\test.exe" MD5="la signature"/>
    Sur mon pc (local) il y a exactement la même structure que sur mon FTP. (dossiers / sous-dossiers / fichiers)


    Imaginons que je souhaite modifier 1 fichier parmi les centaines d'autres. Mon application effectuera une comparaison des signatures MD5 des fichiers sur mon pc à celles du fichier XML.
    Vu que j'ai modifier un fichier la signature a changée et donc mon appli télécharge uniquement le nouveau fichier.


    Pour être encore plus précis;

    Contenu de mon dossier + signature MD5 local :

    C:\dossier\appli.exe (exemple de signature : 123)
    C:\dossier\images\1.png (exemple de signature : 456)
    C:\dossier\images\2.png (exemple de signature : 789)

    Contenu de mon dossier + signature MD5 FTP :

    html\dossier\appli.exe (exemple de signature : 321) <--- Signature différente
    html\dossier\images\1.png (exemple de signature : 456)
    html\dossier\images\2.png (exemple de signature : 789)

    Contenu de fichier XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
      <patch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="patch.xsd">
    	<Entry url="www.site.com/update/appli.exe" local="C:\dossier\test.exe" MD5="321"/>
            <Entry url="www.site.com/update/images/1.png" local="C:\dossier\images\1.png" MD5="456"/>
            <Entry url="www.site.com/update/images/2.png" local="C:\dossier\images\2.png" MD5="789"/>
      </patch>

    La signature du fichier appli.exe sur mon FTP + fichier XML étant différente de celle en local, l'appli télécharge le nouveau fichier.

    Ce système là est présent dans les updaters de certains jeux afin de télécharger des nouvelles mises à jour.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Bah après tu for each sur l'attribut Local de ton xml ça devrait te donner ça (code pseudo algo) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Pour Chaque( Ligne line dans mon fichier XML) faire
         emplacementLocal = line["local"]; //Donnée local de ma ligne XML
         emplacementUrl = line["url"]; // Donnée Url de ma ligne XML
         md5 = line["md5"]; //Donnée MD5 de ma ligne XML
         SI fichier emplacementLocal N existe PAS ALORS telecharge le fichier emplacementUrl , continue la boucle FIN SI
         SI le Md5 du contenu du fichier emplacementLocal EST DIFFERENT de md5 ALORS  telecharge le fichier emplacementUrl , continue la boucle FIN SI
    Fin Pour chaque
    Bien sûr il faut contrôler l'authenticité de ton XML avant que ton logiciel l'interprète ^^ parce que des personnes pourraient changer le md5 des valeurs etc etc

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Mon application est codée en VB.NET :/


    Mon premier soucis est "Comment récupérer toutes les signatures des fichiers dans un dossier" ?

    Pour récupérer la signature MD5 d'un fichier j'utilise cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim objFS As FileStream
            objFS = File.Open("mon_fichier.txt", FileMode.Open, FileAccess.Read, FileShare.Read)
            Dim objMD5 As New MD5CryptoServiceProvider()
            Dim objB As Byte() = objMD5.ComputeHash(objFS)
            Dim strMD5 As String = ""
            For Each a As Byte In objB
                If (a < 16) Then
                    strMD5 &= "0" & a.ToString("X")
                Else
                    strMD5 &= a.ToString("X")
                End If
            Next
            objFS.Close()
            MsgBox(strMD5)
    Ensuite il faudrait les comparer aux signatures de mon fichier XML.
    Si la signature est différente, l'appli télécharge le nouveau fichier.

    Voici un exemple qu'utilise un jeu vidéo.

    Fichier XML avec emplacement en local / URL / MD5 / et sa taille

    http://prntscr.com/8db6p1

    Quand on lance le jeu, "l'updater" vérifier un a un les signatures des fichiers du joueur. En cas de signatures différentes, "l'updater" télécharge le nouveau fichier.

    Merci

Discussions similaires

  1. MD5 : Générer une signature particulière
    Par Araminas dans le forum Sécurité
    Réponses: 5
    Dernier message: 30/01/2014, 14h13
  2. Réponses: 3
    Dernier message: 22/01/2009, 09h15
  3. Réponses: 0
    Dernier message: 15/01/2008, 10h45
  4. [MySQL] Récupération signature md5 d'un répertoire
    Par okuri dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 01/02/2007, 09h25
  5. Comparaison de variable haché en MD5
    Par manuaccess10 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 31/05/2006, 20h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo