none
mot de passe et identifiant modifiable RRS feed

  • Question

  • bonjour

    j’aimerai protéger mon application par un mot de passe et un identifiant que je pourrais modifier en étant connecté.

    merci d'avance

     



    • Modifié Haycom samedi 12 mars 2016 18:56 Les fautes x)
    samedi 9 avril 2011 20:35

Réponses

  • Donc dans Visual Studio commencer par http://msdn.microsoft.com/fr-fr/library/25zf0ze8(v=vs.80).aspx. Choisir Utilisateur comme portée et utiliser les noms IDet PWD avec par exemple "a" et "b" comme valeur. Cela permet de déclarer que l'on veut stocker ces valeurs de configuration par défaut pour chaque utilisateur.

    Si ensuite dans le code on utilise :

    If textboxID.text = My.Settings.ID And textboxMDP =My.Settings.PWD Then au lieu de If textboxID.text = "moi" And textboxMDP ="1234567" Then on ne pourra se connecter qu'en entrant a et b.

    Ensuite sur Form3 sur le clic d'un bouton on peut faire :

    My.Settings.ID=textboxID.Text
    My.Settings.PWD=textboxPWD.Text
    My.Settings.Save

    ce qui enregistre les nouvelles valeurs dans le fichier. Il faudra donc maintenant entrer ces nouvelles valeurs que l'application nous laisse passer.

    Une fois que ce mécanisme est maîtrisé, il sera sans doute ensuite souhaitable de crypter les identifiants et mots de passe avant de les écrire dans le fichier et de les décrypter avant utilisation pour éviter que qq puisse les voir simplement en ouvrant le fichier.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse Ciprian Duduiala lundi 11 avril 2011 07:52
    • Non proposé comme réponse Haycom lundi 11 avril 2011 15:39
    • Proposé comme réponse TroxsaEditor mercredi 13 avril 2011 16:28
    • Marqué comme réponse Ciprian Duduiala vendredi 15 avril 2011 06:40
    dimanche 10 avril 2011 15:58
    Modérateur
  • Bonjour,

    J'ai fait un essai. Cela me donnerait par exemple une classe comme :

    Option Strict On
    Imports System.Security.Cryptography
    
    Public Class Cryptographie
      Private algo As New TripleDESCryptoServiceProvider
      Private IV As Byte() = {10, 52, 156, 242, 3, 183, 217, 248}
      Private Key As Byte() = {28, 40, 190, 126, 76, 82, 152, 229, 128, 6, 68, 117, 128, 212, 201, 241, 218, 143, 54, 83, 83, 101, 113, 64}
      Public Function Encrypt(ByVal strInput As String) As String
        ' Décrypteur
        Dim enc As ICryptoTransform = algo.CreateEncryptor(Key, IV)
        Dim memStream As New IO.MemoryStream
        Dim encStream As New CryptoStream(memStream, enc, CryptoStreamMode.Write)
        ' Transformer la chaîne en tableau d'octets
        Dim bufInput As Byte() = System.Text.Encoding.Unicode.GetBytes(strInput)
        ' Crypter
        encStream.Write(bufInput, 0, bufInput.Length)
        ' Jusqu'à la fin
        encStream.FlushFinalBlock()
        ' Lire les données cryptées
        memStream.Position = 0
        Dim bufOutput(CInt(memStream.Length - 1)) As Byte
        memStream.Read(bufOutput, 0, CInt(memStream.Length))
        ' Sous forme de chaine "base64"
        Dim strOutput As String = Convert.ToBase64String(bufOutput)
        Return strOutput
      End Function
      Public Function Decrypt(ByVal strInput As String) As String
        Dim dec As ICryptoTransform = algo.CreateDecryptor(Key, IV)
        Dim memStream As New IO.MemoryStream
        Dim decStream As New CryptoStream(memStream, dec, CryptoStreamMode.Write)
        ' Convertir la chaîne base64 en tableau d'octets
        Dim bufInput As Byte() = Convert.FromBase64String(strInput)
        ' Décrypter les données
        decStream.Write(bufInput, 0, bufInput.Length)
        ' Jusqu'à la fin
        decStream.FlushFinalBlock()
        ' Lire les données décryptées
        memStream.Position = 0
        Dim bufOutput(CInt(memStream.Length - 1)) As Byte
        memStream.Read(bufOutput, 0, CInt(memStream.Length))
        ' Sous forme d'une chaine Unicode
        Dim strOutput As String = System.Text.Encoding.Unicode.GetString(bufOutput)
        Return strOutput
      End Function
    End Class

    Qui pourrait s'utiliser de la façon suivante :

      Const strInput As String = "Démo essai"
    
      Dim strOutput As String
    
      Dim str As String
    
      Dim c As New Cryptographie
    
      Debug.WriteLine(strInput)
    
      str = c.Encrypt(strInput)
    
      Debug.WriteLine(str)
    
      strOutput = c.Decrypt(str)
    
      Debug.WriteLine(strOutput)
    
    

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 12 avril 2011 11:25
    Modérateur

Toutes les réponses

  • Bonjour,

    Avec un fichier binaire.

    Corsialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse EhJoe dimanche 10 avril 2011 07:25
    • Non proposé comme réponse Haycom dimanche 10 avril 2011 12:38
    dimanche 10 avril 2011 07:25
  • Bonjour,

    J'avais vu précédemment la question mais faute de comprendre exactement ce que vous voulez je suis passé à autre chose :

    - "que je pourrais modifier en étant ?". Je ne comprends pas "co" ?
    - de même "protéger mon appli" est un peu vague, la protéger contre quoi ?

    Le degré zéro de la protection serait d'ajouter à son démarrage un formulaire demandant un nom d'utilisateur et un mot de passe (qui serait le même pour tous les utilisateurs, ou l'application utilise une base de données dans laquelle sont enregistrés les utilisateurs autorisés ?) Avez-vous essayé cette technique ?

    Additionnellement, il doit être possible de vérifier de temps à autre dans l'appli que l'identification/mot de passe était bien correct et d"utiliser un outil comme http://msdn.microsoft.com/fr-fr/library/ms227240(v=vs.80).aspx pour rendre le code plus difficile à décompiler (et éviter que cette protection soit trop facile à contourner).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    dimanche 10 avril 2011 09:09
    Modérateur
  • Ok, donc au lieu de comparer l'identifiant /mot de passe avec des valeurs en dur, il faut les comparer avec des variables qui seront alimentées avec l'identifiant et mot de passe actuellement choisi (peut-être les paramètres d'application http://msdn.microsoft.com/fr-fr/library/0zszyc6e(v=VS.80).aspx, voir "Paramètres" dans les propriétés du projet).

    Cela donnerait par exemple qq chose comme if TextBoxID.Text=My.Settings.ID and TextBoxMDP.Text=My.Settings.MDP  Then etc...

    L'écran "Form3" permet de modifier et sauver ces paramètres (My.Settings.ID=NewID.Text:My.Settings.MDP=NewMDP.Text:My.Settings.Save)

    Il serait sans doute souhaitable d'ajouter là dessus un cryptage de ces données pour éviter que l'identifiant/mot de passe apparaissent en clair là où il est stocké.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    dimanche 10 avril 2011 12:07
    Modérateur
  • Donc dans Visual Studio commencer par http://msdn.microsoft.com/fr-fr/library/25zf0ze8(v=vs.80).aspx. Choisir Utilisateur comme portée et utiliser les noms IDet PWD avec par exemple "a" et "b" comme valeur. Cela permet de déclarer que l'on veut stocker ces valeurs de configuration par défaut pour chaque utilisateur.

    Si ensuite dans le code on utilise :

    If textboxID.text = My.Settings.ID And textboxMDP =My.Settings.PWD Then au lieu de If textboxID.text = "moi" And textboxMDP ="1234567" Then on ne pourra se connecter qu'en entrant a et b.

    Ensuite sur Form3 sur le clic d'un bouton on peut faire :

    My.Settings.ID=textboxID.Text
    My.Settings.PWD=textboxPWD.Text
    My.Settings.Save

    ce qui enregistre les nouvelles valeurs dans le fichier. Il faudra donc maintenant entrer ces nouvelles valeurs que l'application nous laisse passer.

    Une fois que ce mécanisme est maîtrisé, il sera sans doute ensuite souhaitable de crypter les identifiants et mots de passe avant de les écrire dans le fichier et de les décrypter avant utilisation pour éviter que qq puisse les voir simplement en ouvrant le fichier.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse Ciprian Duduiala lundi 11 avril 2011 07:52
    • Non proposé comme réponse Haycom lundi 11 avril 2011 15:39
    • Proposé comme réponse TroxsaEditor mercredi 13 avril 2011 16:28
    • Marqué comme réponse Ciprian Duduiala vendredi 15 avril 2011 06:40
    dimanche 10 avril 2011 15:58
    Modérateur
  • Bonjour,

    J'ai fait un essai. Cela me donnerait par exemple une classe comme :

    Option Strict On
    Imports System.Security.Cryptography
    
    Public Class Cryptographie
      Private algo As New TripleDESCryptoServiceProvider
      Private IV As Byte() = {10, 52, 156, 242, 3, 183, 217, 248}
      Private Key As Byte() = {28, 40, 190, 126, 76, 82, 152, 229, 128, 6, 68, 117, 128, 212, 201, 241, 218, 143, 54, 83, 83, 101, 113, 64}
      Public Function Encrypt(ByVal strInput As String) As String
        ' Décrypteur
        Dim enc As ICryptoTransform = algo.CreateEncryptor(Key, IV)
        Dim memStream As New IO.MemoryStream
        Dim encStream As New CryptoStream(memStream, enc, CryptoStreamMode.Write)
        ' Transformer la chaîne en tableau d'octets
        Dim bufInput As Byte() = System.Text.Encoding.Unicode.GetBytes(strInput)
        ' Crypter
        encStream.Write(bufInput, 0, bufInput.Length)
        ' Jusqu'à la fin
        encStream.FlushFinalBlock()
        ' Lire les données cryptées
        memStream.Position = 0
        Dim bufOutput(CInt(memStream.Length - 1)) As Byte
        memStream.Read(bufOutput, 0, CInt(memStream.Length))
        ' Sous forme de chaine "base64"
        Dim strOutput As String = Convert.ToBase64String(bufOutput)
        Return strOutput
      End Function
      Public Function Decrypt(ByVal strInput As String) As String
        Dim dec As ICryptoTransform = algo.CreateDecryptor(Key, IV)
        Dim memStream As New IO.MemoryStream
        Dim decStream As New CryptoStream(memStream, dec, CryptoStreamMode.Write)
        ' Convertir la chaîne base64 en tableau d'octets
        Dim bufInput As Byte() = Convert.FromBase64String(strInput)
        ' Décrypter les données
        decStream.Write(bufInput, 0, bufInput.Length)
        ' Jusqu'à la fin
        decStream.FlushFinalBlock()
        ' Lire les données décryptées
        memStream.Position = 0
        Dim bufOutput(CInt(memStream.Length - 1)) As Byte
        memStream.Read(bufOutput, 0, CInt(memStream.Length))
        ' Sous forme d'une chaine Unicode
        Dim strOutput As String = System.Text.Encoding.Unicode.GetString(bufOutput)
        Return strOutput
      End Function
    End Class

    Qui pourrait s'utiliser de la façon suivante :

      Const strInput As String = "Démo essai"
    
      Dim strOutput As String
    
      Dim str As String
    
      Dim c As New Cryptographie
    
      Debug.WriteLine(strInput)
    
      str = c.Encrypt(strInput)
    
      Debug.WriteLine(str)
    
      strOutput = c.Decrypt(str)
    
      Debug.WriteLine(strOutput)
    
    

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 12 avril 2011 11:25
    Modérateur
  • Bonjour, baptiste plancke,

     

    Pouvons-nous supposer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, il serait utile de partager avec nous, afin que  d'autres personnes avec le même problème peuvent profiter de cette solution.

     

    Nous avons marqué les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

      

    Cordialement,

     

    Cipri

     

     


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 15 avril 2011 06:40