2013-04-16 5 views
0

en pensant faire une petite modification à mon formulaire de connexion au lieu de mettre le mot de passe dans mon code comme une variable est-il possible de le crypter et de le stocker dans un fichier texte temps je veux me connecter, il compare le mot de passe du fichier texte ??cryptage de mot de passe de base et stocker mot de passe dans un fichier

private void button1_Click(object sender, EventArgs e) 
     { 
      string username1 = "Richard"; 
      string password1 = "Peugeot"; 

      if (this.textBox1.Text == username1 && this.textBox2.Text == password1) 
      { 
       MessageBox.Show("Welcome Richard!", "Welcome"); 
       Form1 frm = new Form1(); 
       frm.Show(); 
       this.Hide(); 
      } 
      else 
       MessageBox.Show("Incorrect username or password", "Bad credentials"); 
     } 
+1

Basiquement, vous êtes à la recherche pour le chiffrement de chaîne, qui est bien documenté, voir [Chiffrer/Décrypter une chaîne dans .NET] (http://stackoverflow.com/questions/202011/encrypt-decrypt-string-in-net). –

+1

Avez-vous googlé vous-même au moins une seconde, et qu'avez-vous essayé jusqu'à présent. (oh, et comme réponse à vous question oui, c'est possible) –

Répondre

2

Tu es sûr peut, écrivez simplement le mot de passe SHA1 - ou mieux - SHA2 crypté dans votre fichier et de le comparer à chaque fois (merci J. Steen pour metioning!), Mais je vous encourage fortement à pas faire ceci - ceci n'est pas sûr du tout.

+1

Et même pour une méthode non sécurisée comme celle-ci, veuillez ne pas suggérer MD5. Cet algorithme de hachage est brisé cryptographiquement. En fait, SHA1 est également assez peu sûr. SHA2 semble être un algorithme assez robuste (actuellement) à utiliser. =) –

+0

Merci pour cet indice, j'ai mis à jour ma réponse :-) – akluth

0

Eh bien, vous pourriez faire en sorte que le programme ait son propre code de cryptage. Par exemple, changez tout 'a' en "kra /".

Mais comme mentionné ci-dessus, ce n'est pas vraiment sûr. Mais selon votre utilisation, il se peut que ce ne soit pas obligatoire.

+2

S'il vous plaît ne pas suggérer des choses comme ça, le cryptage et le hachage dans .NET sont probablement plus faciles à faire que de créer votre propre méthode de substitution et sont beaucoup plus sécurisés. – Satal

2

Je suggère de stocker votre mot de passe haché plutôt que crypté (le hachage est un moyen où le cryptage est réversible). J'ai écrit à ce sujet ici (Password storage, how to do it right).

J'ai aussi écrit un morceau de code pour hacher la chaîne en utilisant SHA512, le code est en VB.NET mais il devrait être assez simple de le déplacer en C#, le code est disponible ici (Calculate the SHA512 hash of string or file).

Si vous hachez le mot de passe et le comparez au hachage que vous avez enregistré dans le fichier, si les deux correspondent, ils ont fourni le même mot de passe que celui qui a été haché à l'origine. Comme J. Steen mentionné dans le commentaire ci-dessous que je n'avais pas précisé que vous devriez également saler vos hachages, c'est ajouter une chaîne prédéfinie au mot de passe avant de le hacher. Cela rend plus difficile pour quiconque de forcer le texte brut. Donc, par exemple, si le mot de passe était Password1 (je sais quel mot de passe incroyable), vous ajouteriez une chaîne que vous stockez dans votre application au début comme ~{}:@>?!"£$)&(*$. Vous devez ensuite hacher la valeur ~{}:@>?!"£$)&(*$Password1. Lorsque vous voulez vérifier que l'utilisateur a fourni le même mot de passe dans la connexion, vous utilisez le même sel et le mot de passe qu'ils fournissent.

Il faut espérer que l'explique, sinon et vous vous sentez le premier lien ne vous aidez pas à comprendre, ne hésitez pas à me le faire savoir: D

+0

Entièrement d'accord avec vous sur ce point, je le mentionne dans le premier lien. Je vais ajouter cela à la réponse, bien que :) – Satal

Questions connexes