C# Passwort-Verschlüsselung
Fand ich einige code-online, das funktioniert ziemlich gut für das, was ich zu tun versuche. Ich brauche etwas, das verschlüsseln ein Kennwort, speichern Sie in einer Datenbank und abrufen mit Leichtigkeit. Der code unten tut fast alles, was ich Suche.
string UserName = txtUser.Text;
string password = txtPass.Text;
string encrKey = "keyvalue";
byte[] byteKey = { };
byte[] IV = {25, 47, 60, 88, 99, 106, 125, 139};
byteKey = Encoding.UTF8.GetBytes(encrKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputArray = Encoding.UTF8.GetBytes(password);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byteKey, IV), CryptoStreamMode.Write);
cs.Write(inputArray, 0, inputArray.Length);
cs.FlushFinalBlock();
password = Convert.ToBase64String(ms.ToArray());
SqlCommand cmd = new SqlCommand("INSERT INTO USers (UserName, Password) VALUES (@UserName, @Password)", myConnection);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@UserName", UserName);
cmd.Parameters.AddWithValue("@Password", password);
SqlDataReader rdr = cmd.ExecuteReader();
Das Problem, das ich verwende, ist der Fehler code aus, wenn das Kennwort ist 8 Zeichen oder mehr. Ich bekomme diese Fehlermeldung:
System.Sicherheit.Die Kryptographie.CryptographicException: die Angegebene Taste ist keine gültige Größe für diesen Algorithmus. Der Fehler wird generiert, auf die Cryptostream-Linie.
Brauche ich eine andere Art für meine Schlüssel?
- mögliche Duplikate von Salzen Sie Ihr Passwort: Best Practices?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die gängige Praxis ist nicht zu verschlüsseln ein Kennwort in der Datenbank, aber zu Hashen.
Wenn der Benutzer versucht, sich einzuloggen, nehmen Sie seine eingegebene Passwort Hashen und zu vergleichen, um die hash gespeichert in deine db.
Den Industrie-standard-hashing-Algorithmus SHA-1 wird gelesen verfügbar .NET.
Für noch mehr Sicherheit verwenden Sie die "Salz" in Ihrer Vermischung.
Lesen Sie mehr über es hier: Salzen Sie Ihr Passwort: Best Practices?
Wenn Sie brauchen, um tatsächlich die Umkehrung der Verschlüsselung, verwenden Sie einfach die ProtectedData Klasse:
http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx
Wenn andere hier korrekt sind, verwenden Sie ein salted hash wie in der Beispiel-Klasse unten. Der folgende Auszug wurde aus "Ein weiteres Beispiel dafür, wie speichern einer gesalzenen Passwort-hash"
Hashing der Passwörter ist viel besser als verschlüsseln. Sie speichern den hash des Passwortes in der Datenbank, und Sie kümmern sich nicht mehr über den normalen text-Kennwort. Wenn der Benutzer-Logon, Holen Sie die normale text-Passwort, hash und Vergleiche die beiden hashes (d.h. die in der Datenbank, und die, die Sie Hash aus der Eingabe des Benutzers) zu authentifizieren. Der klare Vorteil hier ist, dass Sie sicherstellen, dass keine man - was auch immer der Grund, warum er Zugriff auf die Datenbank - wissen, das original-Passwort (theoretisch).
ich schlage vor, u bcrypt verwenden. der source-code zur Verfügung, bei http://code.google.com/p/bcryptnet/
download und verwenden Sie es. aber bevor Sie es verwenden. die Dokumentation zu Lesen und zu verstehen, wie es funktioniert und warum bcrypt...
es ist wichtig.
durch meine Forschung für ein paar Wochen über die Passwort-Verschlüsselung. schließlich fand ich dieses bcrypt, die am besten zu meinen Bedürfnissen angepasst. ( ich denke, es ist am besten geeignet für Passwort, korrigiert mich wenn ich falsch bin)
es ist eine ein-Weg-Verschlüsselung. genau wie das, was einige dope Programmierer sagte, Hashen und zu vergleichen, aber nicht entschlüsseln.
hoffe, dies hilft Ihnen. wenn Sie finden, othre interessante Dinge bitte lassen Sie mich wissen XD peace~~
alles, was ich sagte, falsch ist, korrigiert mich XD
Versuchen Sie dies: