Dbzfreak1337 (07.08.2012), Minecraft (07.08.2012), Sky.NET (07.08.2012)
Thema: GenerateSecurePassword
-
07.08.2012, 16:36 #1
- Registriert seit
- 29.07.2012
- Beiträge
- 4
Thanked 3 Times in 1 PostGenerateSecurePassword
Hallo,
folgende Funktion:
PHP-Code:/// <summary>
/// Generiert ein Sicheres Passwort!
/// </summary>
/// <param name="length">Die Länge des gewünschten Passworts</param>
/// <returns>Ein sicheres Passwort in Form eines Strings</returns>
public String GenerateSecurePassword(int length)
{
if (length <= 8) throw new Exception("Password-Length must be over 8 to be secure!");
StringBuilder password = new StringBuilder();
char? lastChar = null;
Random rnd = new Random();
for (int i = 0; i < length; i++)
{
char generatedChar;
switch (rnd.Next(4)) //Zufällig auswählen zwischen Groß- und Kleinbuchstaben sowie Zahlen und Sonderzeichen!
{
case 0: //A-Z
generatedChar = (char)rnd.Next(0x51, 0x5B);
break;
case 1://a-z
generatedChar = (char)rnd.Next(0x61, 0x7B);
break;
case 2: //0-9
generatedChar = (char)rnd.Next(0x30, 0x3A);
break;
default: //Sonderzeichen
generatedChar = (char)rnd.Next(0x21, 0x41);
while (generatedChar >= 0x30 && generatedChar < 0x3A) //Keine Zahlen bei Sonderzeichen!!
{
generatedChar = (char)rnd.Next(0x21, 0x41);
}
break;
}
if (generatedChar == lastChar) //Verhindern das der generierte Char dem alten entspricht
{
i--;
}
else
{
password.Append(generatedChar);
lastChar = generatedChar;
}
}
return password.ToString();
}
- Ein Passwort in der gewünschten Länge, welches den Richtlinien von DMW entspricht
- Ein Passwort, welches keine hintereinander wiederholende Zeichen hat
- Ein Passwort mit Sonderzeichen, Zahlen und Groß- sowie Kleinbuchstaben
Es ist für mich persönlich klar, dass dieses Passwort dann am Besten in einem PasswortSafe gespeichert werden sollte, weil es sich nicht einfach merken lässt aber laut der How Secure Is My Password? - Website ist das Passwort dafür auch sehr sicher!
#XChunkGeändert von XChunk (10.08.2012 um 14:15 Uhr)
-
The Following 3 Users Say Thank You to XChunk For This Useful Post:
-
10.08.2012, 14:40 #2
AW: GenerateSecurePassword
Die eigentliche Programmlogik lässt sich auf 1 Zeile kürzen:
PHP-Code:public static void GeneratePassword()
{
//Usereingabe die nur einen int annimmt (defensive coding!)
int length = 0;
do
{
Console.WriteLine("Bitte gewünschte Passwortlänge eingeben");
int.TryParse(Console.ReadLine(), out length);
}
while (length <= 0 && length < int.MaxValue);
//Hier wird das passwort generiert
string securePassword = string.Join(string.Empty, Enumerable.Repeat(new Random(), length).Select(r => (char)r.Next(33, 127)));
//Ausgabe
Console.WriteLine(securePassword);
//Alle Happy -> beenden mit Enter
Console.ReadLine();
}
PHP-Code:string securePassword = string.Join(string.Empty, Enumerable.Repeat(new Random(), length).Select(r => (char)r.Next(33, 127)));
Geändert von Sky.NET (10.08.2012 um 19:12 Uhr)
-
10.08.2012, 15:56 #3
- Registriert seit
- 19.11.2011
- Beiträge
- 496
Thanked 412 Times in 268 PostsAW: GenerateSecurePassword
Kann man auch als
nicht .netler
Die verwendeten Methoden sind doch sehr aussagekräftig.
string.Join fügt 'ne Zeichenkette zwischen jedes Element eines Array ein. Enumerable.Repeat erzeugt "length Mal" ein neues Random-Objekt, mit dem jeweils pseudozufällige Characters aus dem ASCII-Bereich 33-127 erzeugt werden, die dann später zu einer aus Characters bestehenden Liste hinzugefügt werden (bzw. zu einer gemacht werden).Geändert von Mr. White (10.08.2012 um 16:01 Uhr)
-
The Following User Says Thank You to Mr. White For This Useful Post:
Sky.NET (10.08.2012)
-
10.08.2012, 16:04 #4
AW: GenerateSecurePassword
@DANP (der Beitrag wurde gelöscht)
Fullquote = Fail
Und da es in diesem Sub um das .NET FW geht, ist deine Bitte ein wenig fragwürdig.
Ich erklärs aber mal für .NET Noobs.
PHP-Code:string securePassword =
//String.Join = eine Aufzählung von Zeichenketten unterverwendung eines Trennzeichens zusammenfügen
string.Join(
//Unser Trennzeichen ist leer
string.Empty,
//Enumerable.Repeat ist eine LinQ-Funktion und generiert eine Sequenz eines Wertes (normalerweise immer der gleiche Wert)
Enumerable.Repeat(
//erzeugt einen zufälligen Wert
new Random(),
//und zwar so oft wir das wollen
length
)
//Wieder eine LinQ-Funktion, welche jedes Element in der Sequenz nach einem bestimmten Schema umwandelt
.Select(
//Nun folgt eine anonyme Methode, auch Lambda-Expression genannt
//in welcher jedes Element zuerst in die variable r gelegt wird
r =>
//Und anschließend in einen zufälligen Char konvertiert wird (33-127 sind die 'normalen' zeichen der UTF-8 CharMap
(char)r.Next(33, 127)
)
);
Geändert von Sky.NET (10.08.2012 um 16:23 Uhr)
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.