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 :

Algorithmes de Hash


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut Algorithmes de Hash
    Bonjour,

    Je souhaiterai réaliser un logiciel pour hacher des chaînes de caractères en VB.NET. Quelque chose de comparable à cela : Générateur de Hash en ligne mais en WindowsForm.
    Or ne sont implémentés que les algorithmes suivants en Visual Basic 2008 :
    • MD5
    • SHA1
    • SHA256
    • SHA384
    • SHA512
    • RIPEMD160


    Ce qui n'en fait que 6 sur les 38 proposés par ce service (les principales lacunes sont Haval et Tiger). Cela fait longtemps que je cherche sur de nombreux sites, sauriez-vous s'il vous plaît où pourrais-je trouver les codes pour implémenter un maximum d'algorithmes de hash à mon logiciel ? Si vous avez des sources dans un autre langage je suis tout de même intéressé !

    Merci beaucoup de votre attention !
    Léo Nicoletti, lycéen en filière S.

  2. #2
    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 : 44
    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
    Par défaut
    Regarde du côté des librairies de cryptographie BouncyCastle et Mentalis.org, ça contient sûrement des algos de hash...

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    Merci Tomlev pour votre réponse.

    J'ai cherché du côté de ces librairies et j'ai trouvé la DLL Org.Mentalis.SecurityService possèdant les algorithmes RC4, MD4 et HMAC en plus mais j'ai du mal à les utiliser.

    Voici le code que j'ai trouvé sur la MSDN pour utiliser les algorithmes implémentés dans le framework :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim md5Hasher As MD5 = MD5.Create()
    Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(InputBox("texte")))
    Dim sBuilder As New StringBuilder()
     
    Dim i As Integer
    For i = 0 To data.Length - 1
      sBuilder.Append(data(i).ToString("x2"))
    Next i
     
    MsgBox(sBuilder.ToString())
    Ce code marche pour la DLL avec par exemple l'algorithme MD4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim md4Hasher As Cryptography.md4CryptoServiceProvider = Cryptography.MD4CryptoServiceProvider.Create
    Dim data As Byte() = md4Hasher.ComputeHash(Encoding.Default.GetBytes(InputBox("texte")))
    Dim sBuilder As New StringBuilder()
     
    Dim i As Integer
    For i = 0 To data.Length - 1
      sBuilder.Append(data(i).ToString("x2"))
    Next i
     
    MsgBox(sBuilder.ToString())
    Mais quand j'essaye avec l'algorithme RC4 (par exemple), là il me signale que "ComputeHash" n'est pas un membre de mon objet.

    • Quelle est la différence entre ces deux applications (MD4 et RC4) ?
    • J'en profite pour vous demander quelle est la différence entre par exemple : MD4 et MD4CryptoServiceProvider ?


    Merci beaucoup une fois de plus !

  4. #4
    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 : 44
    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
    Par défaut
    Citation Envoyé par LéoNicoletti Voir le message
    Quelle est la différence entre ces deux applications (MD4 et RC4) ?
    RC4 n'est pas un algorithme de hachage mais de cryptage (si tu regardes dans les sources, tu verras que la classe RC4 hérite de SymmetricAlgorithm et non de HashAlgorithm)

    Citation Envoyé par LéoNicoletti Voir le message
    J'en profite pour vous demander quelle est la différence entre par exemple : MD4 et MD4CryptoServiceProvider ?
    MD4 est une classe abstraite. MD4CryptoServiceProvider est une implémentation de MD4. L'intérêt de ceci est qu'on peut facilement fournir d'autres implémentations de MD4, qui seront utilisées de la même manière. Regarde les classes de crypto du framework, elles utilisent le même schema (MD5 - MD5CryptoServiceProvider, etc)

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    Effectivement, désolé je me suis trompé quant au RC4, mais bon ma syntaxe de marche pas non plus pour le HMAC qui est bien une fonction de hachage.

    Quelle serait alors s'il te plaît la syntaxe pour faire marcher toutes ces fonctions ((dé)chiffrement et hachage) qu'elles soient implantées dans le framework ou référencées ?

    Merci beaucoup pour ton aide qui m'est très précieuse pour comprendre l'utilisation de fonctions référencées.

  6. #6
    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 : 44
    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
    Par défaut
    Citation Envoyé par LéoNicoletti Voir le message
    Effectivement, désolé je me suis trompé quant au RC4, mais bon ma syntaxe de marche pas non plus pour le HMAC qui est bien une fonction de hachage.

    Quelle serait alors s'il te plaît la syntaxe pour faire marcher toutes ces fonctions ((dé)chiffrement et hachage) qu'elles soient implantées dans le framework ou référencées ?

    Merci beaucoup pour ton aide qui m'est très précieuse pour comprendre l'utilisation de fonctions référencées.
    HMAC est un cas particulier, c'est un KeyedHashAlgorithm, c'est à dire un algorithme de hachage utilisant une clé. Il faut passer un HashAlgorithm en paramètre du constructeur pour pouvoir le créer.

    Je te conseille de consulter la doc du framework pour bien comprendre comment s'organisent les différentes classes de cryptographie. De plus, si tu veux que ton programme soit générique (i.e. que tu n'aies pas à réécrire un code presque identique pour chaque algorithme), il faut bien comprendre le mécanisme de l'héritage et du polymorphisme. En .NET, toutes les classes qui implémentent un algorithme de hachage héritent de HashAlgorithm. Elles ont donc toutes une méthode ComputeHash avec la même signature. Donc, si je reprends tes exemples de code plus haut, tu pourrais les factoriser de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function ComputeHash(ByVal text As String, ByVal algorithm As HashAlgorithm) As String
     
        Dim bytes As Byte() = Encoding.Default.GetBytes(text)
        Dim hash As Byte() = algorithm.ComputeHash(bytes)
     
        Dim sBuilder As New StringBuilder() 
        Dim i As Integer
        For i = 0 To data.Length - 1
          sBuilder.Append(data(i).ToString("x2"))
        Next i
     
        Return sBuilder.ToString()
     
    End Function
    Une fois que tu as cette fonction, tu peux lui passer en paramètre n'importe quel algoritme de hachage que tu auras instancié.

  7. #7
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par tomlev Voir le message
    HMAC est un cas particulier, c'est un KeyedHashAlgorithm, c'est à dire un algorithme de hachage utilisant une clé. Il faut passer un HashAlgorithm en paramètre du constructeur pour pouvoir le créer.
    On peut le faire sans clé avec la méthode statique Create (HMAC.Create, HMACMD5.Create, ...) il me semble, une clé par défaut est utilisée à ce moment. A confirmer tout de même (je n'ai pas de quoi tester sous la main au moment où j'écris ^^).

    Pour compléter la méthode ComputeHash de tomlev, on peut réaliser une variante en utilisant la méthode HashAlgorithm.Create en passant la chaîne qui correspond au type d'algorithme à utiliser ("System.Security.Cryptography.SHA1Managed" pour du SHA1 à la sauce .Net par exemple). Il suffit d'avoir une liste des algorithmes acceptés et ensuite indiquer lequel utiliser.

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    Merci beaucoup tomlev pour ces indications, je vais utiliser ton code pour mon programme de hachage. Quant à HMAC, j'ai effectivement constaté la différence entre ces deux méthodes, il doit bien y a voir une clé par défaut.

    Je pars pour trois jours, je me lancerai dans mon code dimanche soir et la semaine prochaine, si je rencontre un problème je vous en parlerai ! En attendant je mets le sujet résolu et je vous félicite pour cette aide, très efficace est très bien ciblée ! Merci encore !

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    Bonjour,

    Comme promis je me suis lancé dans le code de mon générateur d'empreinte cryptographiques en VB.NET et j'ai très bien réussi après quelques heures de code !

    Mais j'en profite pour vous poser une dernière question sur un point qui m'intrigue dont vous avez un peu parlé : la clé du HMAC. J'ai trouvé ce générateur de Hash (j'en profite pour vous en faire profiter : Hash Generator) très complet. Mais dans les champs du formulaire se trouvent deux arguments qui m'intriguent : "Salt" et "HMAC-key". Je vois qu'ils sont passés en paramètres de certaines fonctions...

    Mais que signifie "Salt" ? Et qu'est-ce que ce "HMAC" qui se retrouve en paramètre de d'autres fonctions comme SHA1 ("SHA-1(HMAC)") ?

    Merci beaucoup pour toute votre aide et promis c'est la dernière fois que je vous dérange dans ce sujet !! Léo.

  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 : 44
    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
    Par défaut
    Euh, là on arrive au bout de mes maigres connaissances en cryptographie...
    Regarde sur Wikipedia, ça à l'air bien expliqué

    Citation Envoyé par LéoNicoletti Voir le message
    Merci beaucoup pour toute votre aide et promis c'est la dernière fois que je vous dérange dans ce sujet !! Léo.
    Tu ne nous déranges pas, le forum sert à ça

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    Merci, je vois un peu mieux ce qu'est le HMAC.
    J'ai fait un tour sur BouncyCastle et j'ai trouvé une DLL contenant pas mal de choses, c'est la version 1.5 compilée. Il me semble avoir trouvé les algorithmes de hachage dans l'espace de nom "Crypto.Digests" mais je n'arrive à les utiliser.

    Il n'ont pas de méthode "Create()" et par conséquent cette syntaxe ne marche pas pour ceux ci. Ils ne possèdent pas non plus de méthode "ComputeHash()".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports Org.BouncyCastle.Crypto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim md4 As Digests.MD4Digest
    Dim cOctets As Byte() = Encoding.Default.GetBytes(InputBox("?"))
    Dim cHach As Byte() = md4.ComputeHash(cOctets)
    Dim sBuilder As New StringBuilder()
    For i As Integer = 0 To cHach.Length - 1
      sBuilder.Append(cHach(i).ToString("x2"))
    Next i
    MsgBox(sBuilder.ToString())
    Est-ce que cette DLL est utilisable pour hacher ? Et si oui avec quelle syntaxe s'il vous plaît.

    Merci une fois de plus

  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 : 44
    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
    Par défaut
    Apparemment cette classe n'est pas conçue selon le modèle des classes du framework .NET, elle n'hérite pas de HashAlgorithm et n'a pas les mêmes méthodes. D'ailleurs je ne comprends pas trop comment ça s'utilise, je ne vois aucune méthode qui semble renvoyer le hash

  13. #13
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    D'accord, je vais m'en tenir aux fonctions que j'ai déjà instanciée.
    Je vous remercie !!

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

Discussions similaires

  1. [ALL Versions] Recherche algorithme de hash des passwords
    Par jeeps64 dans le forum Administration
    Réponses: 7
    Dernier message: 10/04/2013, 13h54
  2. algorithme de hashing
    Par edmondzos dans le forum Mathématiques
    Réponses: 1
    Dernier message: 14/07/2010, 11h15
  3. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 15h25
  4. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 13h09
  5. Algorithme génétique
    Par Stephane.P_(dis Postef) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/03/2002, 18h14

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