Problème Vérification MD5 depuis un enclenchement de bouton.

LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012 - 15 févr. 2012 à 22:11
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012 - 17 févr. 2012 à 17:35
Bonjour à tous, j'ai pour projet depuis un launcher de faire une vérification MD5 au moment de l'action du bouton jouer.click

J'ai donc interpréter ceci, le problème étant qu'au lancement du jouer.click le MD5 n'a pas l'air fonctionnel "vu que pour un test j'ai modifier le fichier donc il devrait m'induire en erreur et ce n'est pas le cas"

Donc j'aimerai savoir si une erreur à étais faite dans mes réglages et aussi j'aimerai savoir si il serai possible qu'a la validation du MD5 le shell test.exe se lance et en cas de mauvais MD5 qu'il affiche un messagebox d'erreur SANS me lancer le shell test.exe car actuellement il me le lance.

Si vous avez une solution, je suis preneur, merci à vous d'avance.
Public Shared Function MD5(ByVal file As String) As String
        If System.IO.File.Exists("D:\Jeux\Test\test.img") Then
            Dim st As System.IO.FileStream = Nothing
            Try
                Dim check As System.Security.Cryptography.MD5CryptoServiceProvider
                st = System.IO.File.Open("D:\Jeux\Test\test.img", System.IO.FileMode.Open, System.IO.FileAccess.Read)
                check = New System.Security.Cryptography.MD5CryptoServiceProvider()
                Dim somme As Byte() = check.ComputeHash(st)
                Dim ret As String = "AA987757F3616BE098E2BBCD2EFACE43"
                For Each a As Byte In somme
                    If a < 16 Then
                        ret &= "0" + a.ToString("X")
                    Else
                        ret += a.ToString("X")
                    End If
                Next
                Return ret
            Catch
                Throw
            Finally
                If Not st Is Nothing Then
                    st.Close()
                End If
            End Try
        Else
            Throw New System.IO.FileNotFoundException("Fichier non trouvé.", file)
        End If
    End Function
 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Jouer.Click
 
        Dim poney As String = MD5("D:\Jeux\Test\test.img")
 
        If poney = "AA987757F3616BE098E2BBCD2EFACE43" Then
 
        End If
 
        Dim Apath As String
        Dim Aname As String
        Aname = _
        System.Reflection.Assembly.GetExecutingAssembly. _
        GetModules()(0).FullyQualifiedName
 
        Apath = System.IO.Path.GetDirectoryName(Aname)
        If Not FileIO.FileSystem.FileExists("test.exe") Or Not FileIO.FileSystem.FileExists("---") Or Not FileIO.FileSystem.FileExists("---") Then
            MsgBox("---")
ElseIf FileIO.FileSystem.FileExists((Apath & "\imgtest1.img")) Then
            FileSystem.Kill((Apath & "\imgtest1.img"))
        End If
        If FileIO.FileSystem.FileExists((Apath & "\imgtest2.img")) Then
            FileSystem.Kill((Apath & "\imgtest2.img"))
End If
        Registry.SetValue("HKEY_CURRENT_USER\Software\test1", "Playertest", TextBox1.Text)
Shell("test.exe serveur:1111")

11 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 févr. 2012 à 23:19
Bonjour,

If poney = "AA987757F3616BE098E2BBCD2EFACE43" Then
sera toujours faux, à cause de
Dim ret As String = "AA987757F3616BE098E2BBCD2EFACE43"
For Each a As Byte In somme
   If a < 16 Then
       ret &= "0" + a.ToString("X")
   Else
       ret += a.ToString("X")
   End If
Next


Je pense qu'en espionnant les valeurs en mode pas à pas, tu trouveras ta réponse.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012
16 févr. 2012 à 02:38
Merci de votre réponse Nhenry, je pense avoir compris de quoi vous me parliez :

Dim poney As String = "AA987757F3616BE098E2BBCD2EFACE43"
For Each a As Byte In somme
   If a < 16 Then
       poney &= "0" + a.ToString("X")
   Else
       poney += a.ToString("X")
   End If
Next


Le problème, ça ne fonctionne toujours pas, je suis vraiment à la rue sur ce coup.

Si vous avez une nouvelle indication du pourquoi du comment le checksum ne fonctionne pas, merci à vous NHenri.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 févr. 2012 à 06:55
la question de NHenry, relavait justement cette chose de ton code...

l'ajout systématique de
AA987757F3616BE098E2BBCD2EFACE43
en tête du hash

pourquoi une telle valeur en dur ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012
16 févr. 2012 à 18:22
Hum ... pour essayer de faire simple Renfield, en cliquant sur le bouton jouer.click, je voudrais que le fichier test.img dont je connais déjà le MD5 soit analyser et SI celui-ci à le même MD5 après analyse mon shell .exe se lance sans embuche, si il est mauvais un messagebox m'indique que le fichier test.img est mauvais et doit être remplacer.

Merci pour votre réponse, j'espère vous avoir éclairer .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 févr. 2012 à 18:43
on a bien compris l'énoncé ...

mais remplace

Dim ret As String = "AA987757F3616BE098E2BBCD2EFACE43"

par

Dim ret As String

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012
17 févr. 2012 à 04:08
Dim poney As String
For Each a As Byte In somme
   If a < 16 Then
       ret &= "0" + a.ToString("X")
   Else
       ret += a.ToString("X")
   End If
Next


Le problème maintenant, c'est que j'ai un soucis d'extension sur le "ret" suivant ...

le code au complet

Public Shared Function MD5(ByVal file As String) As String
        If System.IO.File.Exists("D:\Jeux\Test\test.img") Then
            Dim st As System.IO.FileStream = Nothing
            Try
                Dim check As System.Security.Cryptography.MD5CryptoServiceProvider
                st = System.IO.File.Open("D:\Jeux\Test\test.img", System.IO.FileMode.Open, System.IO.FileAccess.Read)
                check = New System.Security.Cryptography.MD5CryptoServiceProvider()
                Dim somme As Byte() = check.ComputeHash(st)
                Dim ret As String
                For Each a As Byte In somme
                    If a < 16 Then
                        ret &= "0" + a.ToString("X")
                    Else
                        ret += a.ToString("X")
                    End If
                Next
                Return ret
            Catch
                Throw
            Finally
                If Not st Is Nothing Then
                    st.Close()
                End If
            End Try
        Else
            Throw New System.IO.FileNotFoundException("Fichier non trouvé.", file)
        End If
    End Function
 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Jouer.Click
 
        Dim poney As String = MD5("D:\Jeux\Test\test.img")
 
        If poney = "AA987757F3616BE098E2BBCD2EFACE43" Then
 
        End If
 
        Dim Apath As String
        Dim Aname As String
        Aname = _
        System.Reflection.Assembly.GetExecutingAssembly. _
        GetModules()(0).FullyQualifiedName
 
        Apath = System.IO.Path.GetDirectoryName(Aname)
        If Not FileIO.FileSystem.FileExists("test.exe") Or Not FileIO.FileSystem.FileExists("---") Or Not FileIO.FileSystem.FileExists("---") Then
            MsgBox("---")
ElseIf FileIO.FileSystem.FileExists((Apath & "\imgtest1.img")) Then
            FileSystem.Kill((Apath & "\imgtest1.img"))
        End If
        If FileIO.FileSystem.FileExists((Apath & "\imgtest2.img")) Then
            FileSystem.Kill((Apath & "\imgtest2.img"))
End If
        Registry.SetValue("HKEY_CURRENT_USER\Software\test1", "Playertest", TextBox1.Text)
Shell("test.exe serveur:1111")


"..." Une dernière tentative et après je jette l'éponge pour cette fonction
0
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012
17 févr. 2012 à 04:12
Dim ret As String
For Each a As Byte In somme
   If a < 16 Then
       ret &= "0" + a.ToString("X")
   Else
       ret += a.ToString("X")
   End If
Next


Je rectifie, mais ça ne fonctionne toujours pas, pour pas changer.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 févr. 2012 à 04:40
ta fonction MD5
calcule bien le HASH de D:\Jeux\Test\test.img

mais parce que tu as codé cela en dur dans le corps de ta fonction...
elle n'utilise pas le parametre File que tu as mis en place, attention


If poney = "AA987757F3616BE098E2BBCD2EFACE43" Then

End If


ton test parait correct, bien que ne faisant rien dans le cas ou le hash coïncide...


System.Reflection.Assembly.GetExecutingAssembly. _
GetModules()(0).FullyQualifiedName

plutot complexe (trop?)



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012
17 févr. 2012 à 04:49
Merci Renfield pour votre réponse, connaitriez vous une fonction moins complexe qui check un MD5 sans trop de complexité.

Car pour être sincère avec vous, j'ai pris cette source sans trop d'espoir et j'ai bien fais, par contre pour le Private sub en général il fait l'affaire pour le reste des attributions que je lui ai donner, mais si vous avez connaissance d'un code simpliste pour le MD5 je suis preneur, car là je pédale dans la semoule .

En tous cas encore un énorme merci pour votre patience.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 févr. 2012 à 07:39
Dim check As MD5CryptoServiceProvider = New MD5CryptoServiceProvider()
st = File.Open(File, FileMode.Open, FileAccess.Read)
Dim somme As Byte() = check.ComputeHash(st)

3 lignes pour faire un hash, je trouve pas cela trop complexe...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
LeFoureur Messages postés 7 Date d'inscription dimanche 12 février 2012 Statut Membre Dernière intervention 17 février 2012
17 févr. 2012 à 17:35
Donc en clair, simplifié de cette manière ?

Public Shared Function MD5(ByVal file As String) As String
        If System.IO.File.Exists("D:\Jeux\image\imgtest.img") Then
            Dim st As System.IO.FileStream = Nothing
            Try
                Dim check As MD5CryptoServiceProvider = New MD5CryptoServiceProvider()
                st = IO.File.Open(file, IO.FileMode.Open, IO.FileAccess.Read)
                Dim somme As Byte() = check.ComputeHash(st)
            Catch
            End Try
        End If
    End Function


ou

Public Shared Function MD5(ByVal file As String) As String
        If System.IO.File.Exists("D:\Jeux\image\imgtest.img") Then
            Dim st As System.IO.FileStream = Nothing
            Try
                Dim check As MD5CryptoServiceProvider = New MD5CryptoServiceProvider()
                st = IO.File.Open(file, IO.FileMode.Open, IO.FileAccess.Read)
                Dim somme As Byte() = check.ComputeHash(st)
                Dim ret As String = ""
                For Each a As Byte In somme
                    If a < 16 Then
                        ret &= "0" + a.ToString("X")
                    Else
                        ret += a.ToString("X")
                    End If
                Next
                Return ret
            Catch
                Throw
            Finally
                If Not st Is Nothing Then
                    st.Close()
                End If
            End Try
        Else
            Throw New System.IO.FileNotFoundException("Fichier non trouvé.", file)
        End If
    End Function
0
Rejoignez-nous