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 :

Protéger des données


Sujet :

VB.NET

  1. #1
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut Protéger des données
    Bonjour à tous !

    Je développe une application mais j'ai besoin de sauvegarder des données confidentielles (mots de passe). Je ne sais pas trop quel procédure utiliser.
    Créer un document texte et le crypter ?
    Utiliser les paramètres (settings) ?
    Utiliser une extension ?

    Merci de votre aide

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    les mots de passe que tu veux conserver servent à se connecter ou tu comptes te faire un portefeuille de mot de passes ? Dans le premier cas tu pourras faire un hash (avec un salt ? mais comment le conserver sans qu'il soit facilement accessible), dans le second réfléchir à l'utilisation d'une PKI.

    Pour la localisation de tes enregistrements il me semble que les settings sont accessibles par l'utilisateur final, du coup ça où un fichier à plat y'a pas une grosse différence (à confirmer tout de même).

    Enfin je ne sais pas bien ce que t'entends par "extension".
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    avec un salt ? mais comment le conserver sans qu'il soit facilement accessible)
    Le rôle du salt est juste de se prémunir contre l'utilisation des tables de brute force (ex. Rainbow Tables). En gros, ca rend une attaque par brute force beaucoup plus coûteuse (mémoire/CPU). Il n'y a aucune contre indication pour stocker le salt et le hash du mot de passe dans la même table.

    Cela dit, si un seul salt est utilisé pour tous les mots de passe, l'attaquant n'aura besoin de faire le calcul qu'une seule fois... S'il y a un salt par mot de passe, c'est une autre histoire. Donc il vaut mieux utiliser un salt différent par mot de passe.

    Il est même recommandé d'aller encore un peu plus loin, en faisant un hash du hash du hash... Vu qu'un attaquant peut aujourd'hui accèder très facilement à de grosses puissances de calcul CPU, il est recommandé d'utiliser PBKDF2 qui est dispo en .NET via la classe Rfc2898DeriveBytes. C'est un standard éprouvé pour réaliser ce genre d'opération. La recommandation est de dériver le hash 1000 fois...

    A lire pour info et des exemples de code : Salted Password Hashing - Doing it Right
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Le rôle du salt est juste de se prémunir contre l'utilisation des tables de brute force (ex. Rainbow Tables). En gros, ca rend une attaque par brute force beaucoup plus coûteuse (mémoire/CPU). Il n'y a aucune contre indication pour stocker le salt et le hash du mot de passe dans la même table.
    Oui mais si l'attaquant connait le salt (car trouvable facilement dans un fichier à plat/settings), ça ne change rien au coût, nop ?
    Après je laisse la décision au développeur d'utiliser n fois sa fonction de hash favorite.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Oui mais si l'attaquant connait le salt (car trouvable facilement dans un fichier à plat/settings), ça ne change rien au coût, nop ?
    Encore une fois, le salt sert juste à complexifier une attaque par force brute (dictionnaire ou rainbow table). Il ralentit l'attaquant car ca demande plus de temps, et ca consomme plus de mémoire.

    En gros, sans salt, l'attaquant peut faire hash(tentative[0]) et comparer le résultat : si le hash obtenu est le même que celui dans la DB alors bingo, sinon il continue avec tentative[1] etc.

    Avec salt, l'attaquant doit faire hash(salt[a] + tentative[0]) puis hash(salt[b] + tentative[0]) etc. Donc le coût est plus élevé.

    Si tu as le temps et l'envie, jette un oeil au lien que j'ai donné plus haut, dans la partie sur le Salt il y a des exemples et des explications un peu plus détaillées
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    De ce que je comprends de la demande, et en partant du principe qu'on n'est pas dans le cas d'un portefeuille de pass (*), Ind6x veut sérialiser à travers un fichier à plat (settings ou maison) un couple user/pass sans qu'un utilisateur qui aurait accès audit fichier puisse exploiter l'information s'y trouvant. Or si l'attaquant tombe sur un enregistrement de type : user/salt/pass_hashé, le salage perd fortement de son utilité (hors méthode de salage exotique). Toi tu pars du principe qu'on ne connait pas ce salt

    (*) oui, parce qu'on cause mais on sait toujours pas bien ce qu'il veut ^^
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonsoir,

    ne mettons pas la charrue avant les boeufs.....
    OP devra preciser si son programme est susceptible d être diffusé publiquement auquel cas le système d encryption devra obligatoirement être différent des propos que vous tenez.

    @OP : soit + precis de l utilisation que tu comptes faire de ton programme :

    - seras-tu le seul utilisateur de ton programme ?
    - le fichier contenant tes données cryptées sera-t-il accessible publiquement ?

    @+

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    ne mettons pas la charrue avant les boeufs.....
    OP devra preciser si son programme est susceptible d être diffusé publiquement auquel cas le système d encryption devra obligatoirement être différent des propos que vous tenez.
    Citation Envoyé par jopopmk Voir le message
    (*) oui, parce qu'on cause mais on sait toujours pas bien ce qu'il veut ^^
    En effet, vous avez raison ce n'est pas très clair

    Citation Envoyé par jopopmk Voir le message
    si l'attaquant tombe sur un enregistrement de type : user/salt/pass_hashé, le salage perd fortement de son utilité (hors méthode de salage exotique). Toi tu pars du principe qu'on ne connait pas ce salt
    Je t'invite à te renseigner plus en profondeur Le salt empêche l'attaquant d'utiliser les rainbow tables (dans le cas où on utilise un salt différent par mot de passe). Il ne lui reste donc plus que l'attaque par dictionnaire. Pour casser des hash de mot de passe ayant une longeur suffisante avec un dictionnaire, il faut plusieurs années... Si en plus tu obliges tes utilisateurs à changer de mot de passe régulièrement, alors aucune chance qu'ils arrivent à casser quoi que ce soit avant plusieurs changements de mot de passe.

    L'utilité du hash n'est pas comparable à l'utilité d'un "secret" en cryptographie. En crypto, si tu as le "secret", tu peux décrypter, donc obtenir le mot de passe en clair. Pour le hash si tu as le salt ca ne te sers pas à grand chose vu qu'on ne peut pas "décrypter" un hash.

    Par contre, si tu n'utilises pas de salt, ou si tu utilises le même salt pour tous tes mots de passe, les rainbow tables pourront être utilisées et comme elles permettent de venir à bout d'un hash relativement rapidement, la sécurité est mise en danger... Bref je m'arrête là car c'est un peu du hors sujet.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    Excuser moi, j'était absent un petit moment.

    Je souhaite faire un portefeuille de mdp !
    Cette application permettra à l'utilisateur d'enregistrer ses mots de passe et les mettre en sécurité... le probleme, c'est comment les enregistré de manière sécurisé !!!

    Merci

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    Alors pour cela, tu peux :
    - Demander un mot de pase maître, le hash en SHA256 et récupérer soit 16,24 ou 32 caractères retournés en fonction du chiffrement voulu (voir plus bas)
    - Enregistrer tous les mots de passe dans un fichier dans le dossier de l'application ou autre, chiffrer en AES 128,192 ou 256 bits, sachant que le 192 et le 256 sont interdits sauf autorisation à moins que je me trompe et avec un vecteur d'initialisation (IV) unique pour chaque mot de passe que tu rangeras dans un fichier chiffré en AES lui aussi, par exemple avec une clé unique (adresse mac hashé) et un vecteur d'initialisation lui aussi unique (d'ailleurs, sa taille doit être fixe 16 bits).

    Tu as des exemples de chiffrement AES par VB.net sur Internet, si tu trouves pas, je t'en donnerai, je dois en avoir fait.
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    @vbcodeur : dans le jargon du chiffrement il faut parler :

    - de clé privé pour le chiffrement symétrique : comme tu le mentionnes l'AES étant le plus usité.

    - de clés privé et publique(s) pour l'asymétrique : communément usité le RSA et le DSA.

    @Ind6x : Ce qu'il faut concevoir dans un 1er tps au niveau de ton projet c'est une fenêtre de connexion ainsi le 1er maillon de la sécurité se basera sur le hashage du mot de passe saisi par l'utilisateur.
    Ensuite il faut vraiment que tu te planches sur un peu de lecture concernant le chiffrement, il existe effectivement plein d'exemples sur le Web comme le disais vbCodeur

    On te prêtera main forte lorsque tu auras ébauchés.

    Bon codage A+

  12. #12
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    Bonjour !

    Alors voilà, j'ai un peu planché sur le hachage et j'ai utilisé l'exemple donné par microsoft (msdn). J AI FAIT MA PREMIERE TABLE DE HACHAGE !!!!
    je vous met une partie du code :

    Form1, avec un bouton ajouter et 6 textbox :

    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
     
    Imports System.Collections
     
    Public Class Form1
     
        Dim MyTable As New Hashtable()
     
        'For simplicity, create three Person objects to add to the HashTable collection.
     
        Dim Person1, Person2, Person3 As Person
     
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Person1 = New Person(TextBox1.Text, TextBox2.Text)
            Person2 = New Person(TextBox3.Text, TextBox4.Text)
            Person3 = New Person(TextBox5.Text, TextBox6.Text)
     
     
            'The Add method takes Key as the first parameter and Value as the second parameter.
     
            Try
                MyTable.Add(Person1.Lname, Person1)
                MyTable.Add(Person2.Lname, Person2)
                MyTable.Add(Person3.Lname, Person3)
            Catch ae As ArgumentException
                MessageBox.Show("Duplicate Key")
            End Try
        End Sub


    Classe Person :


    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 Class Person
     
        Public Fname, Lname As String
     
        Sub New(ByVal FirstName As String, ByVal LastName As String)
            Fname = FirstName
            Lname = LastName
        End Sub
     
        Public Overrides Function ToString() As String
            Return Fname + " " + Lname
        End Function
    End Class

    Bon, j'ai à peu près compris, mais n'hésiter surtout pas à me réexpliquer XD


    Cepandant, j'aimerai savoir comment "enregistrer" les valeurs hachées, puisque je souhaite que lorsque l'utilisateur se connecte, il retrouve ses mots de passe dans la listbox

    2ème question : Ou est stocké la table de hachage avec les clés et les valeurs lors de l'utilisation de l'application ?

    J'aurais sans doute plein d'autre questions puisqu'elles tournent déjà dans ma tête, mais celles-ci sont déjà bien !

    Merci de votre aide

  13. #13
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Hashtable est une classe est n'a absolument rien à voir avec du quelconque hachage !
    C'est une classe qui permet de stocker une paire : clé/valeur tout comme dictionary ou keyValuePair.
    La classe person est complètement inutile dans ton cas (sauf si tu veux faire de la serialisation avec des propriétés différentes bien entendu...mais là je m'éloigne du sujet ^^).

    Lorsque j'évoquai hachage plus haut je parlais de MD5 ou autre.

    Exemple :

    Tu créés un formulaire d'enregistrement de compte utilisateur avec 3 textbox (login, password, confirmPassword) et 1 bouton (Validate)
    Lorsque l'utilisateur enregistre son compte à l'aide du bouton valider alors la fonction MD5 va hasher son MDP et stocker la pair clé/valeur (Login/mdp haché) dans un fichier texte sur son disque dur.

    Tu créés un formulaire de connexion avec 2 textbox (Login et password) et 1 bouton (Connect)
    Lorsque ce même utilisateur s'identifiera et se connectera à l'aide du bouton Connect alors ton application vérifiera si le login existe dans le fichier texte sur son disque dur et que le mdp saisi haché avec une fonction MD5 = le hachage MD5 dans le fichier texte stocké sur son disque.

    Commence par faire cela

    A+

  14. #14
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    Merci de votre réponse

    Fausse alerte alors... XD

    En fait c'est la première fois que je touche au hachage, et en plus je débute en VB.net (2/3 ans de programmation seulement)...
    Je pensais donc que Hashtable était faire un hachage Mais je me suis trompé

    Je vais retravailler mon truc.


    Merci !

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    Bon, voici le corrigé (enfin y a plusieurs mais voici une version possible), si tu comprends pas quelque chose, dis-le moi :
    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
     
    Public Class Cryptography
        Dim hash As String
        Dim salt As String
        Sub New(ByVal key As String, Optional saltlength As Integer = 8)
            salt = ""
            hash = ""
            Dim sha256 As New System.Security.Cryptography.SHA256CryptoServiceProvider
            Dim characters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
            For i = 1 To saltlength
                Randomize()
                salt += characters.Substring(Math.Floor(Rnd() * characters.Length), 1)
            Next
            key += salt
            Dim pass() As Byte = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key))
            For i = 0 To pass.Count - 1
                hash += pass(i).ToString("x2")
            Next
            hash = hash.Substring(0, 32)
            key = ""
        End Sub
        Friend ReadOnly Property getsalt() As String
            Get
                Return salt
            End Get
        End Property
        Friend ReadOnly Property gethash() As String
            Get
                Return hash
            End Get
        End Property
    End Class
    Comment l'utiliser ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim sha256outil = New Cryptography(ton_texte,nombre_de_caractères_du_salt)
    Dim salt = sha256outil.getsalt 'Retourne le salt utilisé
    Dim hash = sha256outil.gethash 'Retourne la valeur hashé avec le salt ajouté au texte voulu.
    Mode de hachage utilisé : SHA-256
    Disponibilité du salt : Oui
    Salt obligatoire : Non
    Salt prédéfini : Non
    Salt aléatoire : Oui

    Qu'est-ce qu'un salt (en français salage) ?

    Le lien : https://fr.wikipedia.org/wiki/Salage...yptographie%29

    En faite, ton texte va se voir ajouter le salage afin d'être hashé. Celui-ci est donc nécessaire lors de la connexion et doit être gardé, si tu n'en veux pas, tu appelles la fonction du haut avec nombre_de_caracteres_du_salt=0.
    Exemple d'un fichier possible :
    Super test:E9vJ8xEQ:d066245d41b240c738affb9731b5de79
    Super:SN9YMBSe:3795df9e6af5558f3f31ac14f033e159

    Pseudo:Salt:Valeur hashé du mot de passe (32 caractères)
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  16. #16
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    @VBcodeur, merci pour ta réponse !

    Alors, vu mon bas niveau voici ce que je ne comprend pas :

    _le optional
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Optional saltlength As Integer = 8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    characters.Substring(Math.Floor(Rnd() * characters.Length), 1)
    Pour ca, il me semble que c'est une conversion en hexa ?! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 0 To pass.Count - 1
                hash += pass(i).ToString("x2")
            Next

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hash.Substring(0, 32)

    Sinon, a part me retourner hasch et salt, y a t-il une autre fonction la dedans ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Friend ReadOnly Property getsalt() As String
            Get
                Return salt
            End Get
        End Property
        Friend ReadOnly Property gethash() As String
            Get
                Return hash
            End Get
        End Property
    End Class
    et sa c'est un peu flou...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim sha256outil = New Cryptography(ton_texte,nombre_de_caractères_du_salt)
    Dim salt = sha256outil.getsalt 'Retourne le salt utilisé
    Dim hash = sha256outil.gethash 'Retourne la valeur hashé avec le salt ajouté au texte voulu.

    Sinon merci beaucoup !!!

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Ind6x Voir le message
    _le optional
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Optional saltlength As Integer = 8
    Optional, ça sert à rendre une variable optionnel (facultative) avec une valeur par défaut défini après si elle n'est pas donné lors de l'appel de la fonction.
    characters.Substring(Math.Floor(Rnd() * characters.Length), 1)

    Récupère un caractère dans la chaîne de caractères characters.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 0 To pass.Count - 1
                hash += pass(i).ToString("x2")
            Next
    Oui, c'est une conversion en hexadécimal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hash.Substring(0, 32)
    Récupère les 32 premiers caractères, en faite, SHA256 retourne une "clé" avec 32 caractères mais en le convertissant sous la forme hexadécimal, cela monte à 64 donc on le rediminue à 32. Tu peux laisser les 64 si tu veux ou mettre le nombre que tu souhaites.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Friend ReadOnly Property getsalt() As String
            Get
                Return salt
            End Get
        End Property
        Friend ReadOnly Property gethash() As String
            Get
                Return hash
            End Get
        End Property
    End Class
    En faite, quand tu fais New Cryptography(...), tu fais la fonction new, et tu obtiens un objet avec deux propriétés : getsalt et gethash, qui te renvoie respectivement le salt et le hash. Comme une Picturebox qui aurait des propriétés comme Image,BackgroundColor...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim sha256outil = New Cryptography(ton_texte,nombre_de_caractères_du_salt)
    Dim salt = sha256outil.getsalt 'Retourne le salt utilisé
    Dim hash = sha256outil.gethash 'Retourne la valeur hashé avec le salt ajouté au texte voulu.
    sha256outil te crée l'objet et salt et hash te récupère les propriétés associés à cet objet.
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  18. #18
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    Merci, je mes sens déjà mieux XD


    Cepandant j'ai fait ca :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Imports System.Security.Cryptography
     
    Public Class Form1
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim sha256outil = New Cryptography(TextBox1.Text, 8)
            Dim salt = sha256outil.getsalt 'Retourne le salt utilisé
            Dim hash = sha256outil.gethash 'Retourne la valeur hashé avec le salt ajouté au texte voulu.
            Label1.Text = hash
            Label2.Text = salt
        End Sub
    End Class
     
    Public Class Cryptography
        Dim hash As String
        Dim salt As String
     
        Sub New(ByVal key As String, Optional saltlength As Integer = 8)
            salt = ""
            hash = ""
            Dim sha256 As New System.Security.Cryptography.SHA256CryptoServiceProvider
            Dim characters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
            For i = 1 To saltlength
                Randomize()
                salt += characters.Substring(Math.Floor(Rnd() * characters.Length), 1)
            Next
            key += salt
            Dim pass() As Byte = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key))
            For i = 0 To pass.Count - 1
                hash += pass(i).ToString("x2")
            Next
            hash = hash.Substring(0, 32)
            key = ""
        End Sub
     
        Friend ReadOnly Property getsalt() As String
            Get
                Return salt
            End Get
        End Property
     
        Friend ReadOnly Property gethash() As String
            Get
                Return hash
            End Get
        End Property
    End Class

    Et j'ai une erreur :

    L'algorithme de chiffrement spécifié n'est pas pris en charge sur cette plateforme.


    J'ai sans doute du faire une bétise

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    Ca marche chez moi, peut-être n'as-tu pas les conditions requises pour exploiter cette classe :

    https://msdn.microsoft.com/fr-fr/lib...code-snippet-1

    Informations de version


    Universal Windows Platform
    Disponible depuis 10
    .NET Framework
    Disponible depuis 1.1
    Silverlight
    Disponible depuis 2.0
    Windows Phone Silverlight
    Disponible depuis 7.0
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  20. #20
    Membre du Club Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    windows XP sp3 32 bits...

Discussions similaires

  1. [XL-2003] Protéger des données dans un fichier partagé
    Par nelson le doudou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/01/2010, 17h14
  2. Protéger des données confidentielles dans un code source java lisible
    Par A Cherry Tells dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/10/2009, 17h23
  3. Protéger des donnés
    Par alex'l dans le forum Général Java
    Réponses: 7
    Dernier message: 10/06/2008, 16h54
  4. [DEV] Protéger les données des objets en objective-C
    Par Ceylo dans le forum Objective-C
    Réponses: 0
    Dernier message: 01/12/2007, 16h11
  5. [Conception] Protéger des données payantes
    Par Denti-fritz dans le forum Langage
    Réponses: 10
    Dernier message: 06/02/2007, 09h51

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