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 :

[cryptage] mot de passe en MD5


Sujet :

VB.NET

  1. #1
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut [cryptage] mot de passe en MD5
    Salut.

    Je cherche à convertir une chaine en chaine crypté.
    J'ai regardé chez microsoft, voir code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function MD5hash(data() As Byte) As Byte()
        ' This is one implementation of the abstract class MD5.
        Dim md5 As New MD5CryptoServiceProvider()
     
        Dim result As Byte() = md5.ComputeHash(data)
     
        Return result
    End Function
    Je ne comprend pas pourquoi ils utilisent le type 'byte'...
    Est-il possible de convertir en string (entrée et sortie)?
    Évènements dans le 06?
    www.sortir06.com

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Parce qu'un Hash n'est pas spécifique aux chaines de caractères, le Hash travaille sur des octets. Après que ces octets représentent des caractères, des nombres, des bitmaps, ou n'importe quoi, ça reste des octets.

    Oui, tu peux utiliser des chaines de caractères pour le Hash, il suffit d'en récupérer la représentation en octet avec Encoding.GetBytes()
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Parce qu'un Hash n'est pas spécifique aux chaines de caractères, le Hash travaille sur des octets. Après que ces octets représentent des caractères, des nombres, des bitmaps, ou n'importe quoi, ça reste des octets.

    Oui, tu peux utiliser des chaines de caractères pour le Hash, il suffit d'en récupérer la représentation en octet avec Encoding.GetBytes()
    ok d'accord.
    Donc j'ai suivi ton conseil.
    J'ai convertie en byte, crypté, puis convertie en string et cela me ressort des caractere bizarre.

    voici la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Function convertie_MD5(ByVal chaine_a_crypter As String) As Byte()
     
            Dim convertie_en_byte As Byte()
            convertie_en_byte = System.Text.Encoding.UTF8.GetBytes(chaine_a_crypter)
     
            Dim md5 As New Security.Cryptography.MD5CryptoServiceProvider()
     
            Dim result As Byte() = md5.ComputeHash(convertie_en_byte)
     
            MsgBox(System.Text.Encoding.UTF8.GetString(result))
     
            Return result
        End Function
    Évènements dans le 06?
    www.sortir06.com

  4. #4
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962

  5. #5
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par bidou Voir le message
    Ce n'est pas du md5?
    Évènements dans le 06?
    www.sortir06.com

  6. #6
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    c'est pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim mMD5 As New MD5CryptoServiceProvider
            Dim UniEnc As New System.Text.UnicodeEncoding
            Dim bitPass() As Byte = UniEnc.GetBytes(Me.TextBox1.Text)
            MsgBox(Convert.ToBase64String(mMD5.ComputeHash(bitPass)))
     
        End Sub

  7. #7
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par bidou Voir le message
    c'est pareil
    Il me faut vraiment du md5 !
    C'est une appli qui va tourner avec MySQL où, les mots de passe sont stocké et crypté en md5 à l'aide de PHP.
    Donc je suis obligé de convertir la chaine de caracete en md5.
    Évènements dans le 06?
    www.sortir06.com

  8. #8
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Et le code que je t'ai donné juste au dessus, c'est pas du MD5 ?

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si je comprends bien ce que tu veux, il faut convertir le tableau de byte en représentation haxadécimale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Sub ByteArrayToHexString(bytes as Byte()) As String
        Dim sb As New StringBuilder()
        For i = 0 To bytes.Length
            sb.AppendFormat("{0:X2}", bytes(i))
        Next i
        Return sb.ToString()
    End Sub
    J'ai pas testé, mais ça doit être un truc comme ça...

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par bidou Voir le message
    Et le code que je t'ai donné juste au dessus, c'est pas du MD5 ?
    Il me semble que les hash MD5 sont généralement représentés en hexa, pas en base 64...

  11. #11
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Si je comprends bien ce que tu veux, il faut convertir le tableau de byte en représentation haxadécimale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Sub ByteArrayToHexString(bytes as Byte()) As String
        Dim sb As New StringBuilder()
        For i = 0 To bytes.Length
            sb.AppendFormat("{0:X2}", bytes(i))
        Next i
        Return sb.ToString()
    End Sub
    J'ai pas testé, mais ça doit être un truc comme ça...
    je n'arrive pas à déclarer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim toto As New StringBuilder()
    J'ai importé la librairie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Text.StringBuilder
    Toujours rien.

    Pourquoi ne pas utiliser StringFormat?
    Quelle est la méthode equivalente à AppendFormat() ?
    Évènements dans le 06?
    www.sortir06.com

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par afrodje Voir le message
    je n'arrive pas à déclarer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim toto As New StringBuilder()
    J'ai importé la librairie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Text.StringBuilder
    Toujours rien.
    C'est le namespace que tu dois importer pas la classe...

    Citation Envoyé par afrodje Voir le message
    Pourquoi ne pas utiliser StringFormat?
    Quelle est la méthode equivalente à AppendFormat() ?
    StringBuilder est plus adapté quand tu dois composer une chaine à partir de nombreuses parties. Evidemment tu peux te débrouiller sans, mais tu crées une nouvelle instance de string à chaque fois, c'est pas terrible...

  13. #13
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par tomlev Voir le message
    StringBuilder est plus adapté quand tu dois composer une chaine à partir de nombreuses parties. Evidemment tu peux te débrouiller sans, mais tu crées une nouvelle instance de string à chaque fois, c'est pas terrible...
    d'accord.


    Voila comment j'appelle la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox(ByteArrayToHexString(System.Convert.ToByte(TextBox1.Text)))
    Il ne peux pas convertir un type 'byte' en tableau de byte.

    J'ai essayé celui (FromBase64String converti en tableau de byte) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(toto(System.Convert.FromBase64String(TextBox1.Text)))
    et me renvoi
    Évènements dans le 06?
    www.sortir06.com

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    D'abord, un petit conseil: évite de faire plein de trucs dans la même instruction, c'est le meilleur moyen de tout mélanger et de faire des erreurs...
    Bon, maintenant, décomposons le problème...
    - A partir d'un texte entré dans une TextBox, tu veux afficher son hash MD5.
    - Tu disposes d'une fonction MD5hash qui prend un tableau de bytes en entrée et renvoie un autre tableau de bytes.
    - Tu disposes aussi d'une fonction ByteArrayToHexString qui convertit un tableau de bytes en sa représentation hexa

    Donc il te manque juste la conversion de la chaine initiale en tableau de bytes... pour ça il faut connaître l'encodage des caractères (ASCII, Unicode...). Par défaut en .NET les chaînes sont en Unicode, tu vas donc utiliser UnicodeEncoding (déjà mentionné dans un post plus haut).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' Conversion de la chaîne en tableau de bytes :
    Dim inputBytes() As Byte
    inputBytes = Encoding.Unicode.GetBytes(TextBox1.Text)
    ' Calcul du hash MD5 :
    Dim md5Bytes() as Byte
    md5Bytes = MD5hash(inputBytes)
    ' Conversion du résultat en chaîne hexadécimale :
    Dim md5String as String
    md5String = ByteArrayToHexString(md5Bytes)
    ' Affichage du résultat :
    MsgBox(md5String)
    En y allant étape par étape, c'est plus simple...

  15. #15
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut


    Prenons un exemple :

    Cryptage de "toto"
    Le programme donne 64CE3749DA2E5B2EC579860B7D3FB426
    Mais réellement crypté en md5, cela donne f71dbe52628a3f83a77ab494817525c6 (Source : http://www.clicasso.fr/outils/md5.php

    Voila le code complet et modifié car une petite erreur (modif sur ByteArrayToHexString) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' Conversion de la chaîne en tableau de bytes :
            Dim inputBytes() As Byte
            inputBytes = Encoding.Unicode.GetBytes(TextBox1.Text)
            ' Calcul du hash MD5 :
            Dim md5Bytes() As Byte
            md5Bytes = MD5hash(inputBytes)
            ' Conversion du résultat en chaîne hexadécimale :
            Dim md5String As String
            md5String = ByteArrayToHexString(md5Bytes)
            ' Affichage du résultat :
            MsgBox(md5String)
     
     
        End Sub
        'converti le tableau de byte en haxadécimale :
        Public Function ByteArrayToHexString(ByVal bytes As Byte()) As String
            'StringBuilder sert à concatener une chaîne de caractères rapidement en traitement
            Dim sb As New StringBuilder()
            Dim i As Integer
            'LIGNE MODIFIEE - rajout de (-1)
            For i = 0 To (bytes.Length) - 1
                sb.AppendFormat("{0:X2}", bytes(i))
            Next i
            Return sb.ToString()
     
     
        End Function
     
        Public Function MD5hash(ByVal data() As Byte) As Byte()
            ' This is one implementation of the abstract class MD5.
            Dim md5 As New Security.Cryptography.MD5CryptoServiceProvider()
            Dim result As Byte() = md5.ComputeHash(data)
            Return result
        End Function
    Évènements dans le 06?
    www.sortir06.com

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Oups, tu as raison... à force de faire du C#, quand j'écris du code VB je fais des conneries
    Et donc ça marche ou pas avec le code corrigé ?
    Si ça ne donne pas le bon résultat, c'est peut-être lié à l'encodage utilisé... essaie avec ASCII à la place d'Unicode.

  17. #17
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Citation Envoyé par tomlev Voir le message
    essaie avec ASCII à la place d'Unicode.


    Super cela fonctionne bien !!
    Juste un petit ToLower pour crypter véritablement en md5.. et le tour est joué.

    Merci à toi pour ta patience.
    Évènements dans le 06?
    www.sortir06.com

  18. #18
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut
    Je mets la fonction final et fonctionnelle pour ceux que ça interresse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     Public Function Crypte_md5(ByVal chaine_crypter As String) As String
            ' Conversion de la chaîne en tableau de bytes :
            Dim tab_byte() As Byte
            tab_byte = Encoding.ASCII.GetBytes(chaine_crypter)
     
            ' Calcul du hash MD5 :
            Dim md5 As New Security.Cryptography.MD5CryptoServiceProvider()
            tab_byte = md5.ComputeHash(tab_byte)
     
            'StringBuilder sert à concatener une chaîne de caractères rapidement en traitement
            Dim sb As New StringBuilder()
            Dim i As Integer
            Dim resultat As String
     
            For i = 0 To (tab_byte.Length) - 1
                sb.AppendFormat("{0:X2}", tab_byte(i))
            Next i
            resultat = sb.ToString.ToLower()
     
            Return resultat
        End Function
    Évènements dans le 06?
    www.sortir06.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. cryptage mot de passe md5
    Par Jaafar_scorpion dans le forum Android
    Réponses: 8
    Dernier message: 10/05/2011, 15h25
  2. Cryptage mot de passe Connection
    Par srvremi dans le forum Sécurité
    Réponses: 16
    Dernier message: 15/02/2010, 20h21
  3. Mysql convertir mot de passe en md5
    Par jcaspar dans le forum Administration
    Réponses: 18
    Dernier message: 04/09/2007, 09h30
  4. [Sécurité] Cryptage mot de passe
    Par elitemedia dans le forum Langage
    Réponses: 5
    Dernier message: 12/09/2006, 21h51
  5. cryptage mots de passe lors de la saisie
    Par ycef dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 14/09/2004, 13h22

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