Feedback

C# - Passwort generieren

Veröffentlicht von am 7/10/2006
(3 Bewertungen)
Generiert ein Passwort aus den im String "Content" enthaltenen Buchstaben.
private string PW(int Länge)
{  
  string ret = string.Empty;
  System.Text.StringBuilder SB = new System.Text.StringBuilder();
  string Content = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw!öäüÖÄÜß\"§$%&/()=?*#-";
  Random rnd = new Random();      
  for( int i = 0; i < Länge; i++)
    SB.Append(Content[rnd.Next(Content.Length)]);
  return SB.ToString();
}
Abgelegt unter Passwort, generieren.

6 Kommentare zum Snippet

Andre schrieb am 7/17/2009:
Hallo,

kann es sein, dass es in der Zeile 8 ...(Content.Length - 1)... heißen muss?

Gruß André
Nico schrieb am 7/26/2009:
Nein, der Paramenter ist die exklusive Obergrenze, da braucht man kein -1 :)

Lg, Nico
biacchh8 schrieb am 9/29/2013:
Man muss Random wiederverwenden, sonst werden keine vernünftigen Zufallszahlen erstellt. Das merkt man, wenn man eine Methode die Random selbst erzeugt in einer Schleife sehr oft hintereinander aufruft.

daher:
private Random mRandom = new Random();

Zitat aus MSDN:
Die Erzeugung der Zufallszahlen startet von einem Startwert. Wenn derselbe Startwert wiederholt verwendet wird, führt dies dazu, dass dieselbe Zahlenfolge erzeugt wird. Eine Möglichkeit, die Erzeugung unterschiedlicher Zahlenfolgen zu gewährleisten, besteht darin, den Startwert zeitabhängig zu machen. Dabei wird für jede neue Instanz von Random eine neue Zahlenfolge erzeugt. Standardmäßig verwendet der parameterlose Konstruktor der Random-Klasse die Systemuhr zum Generieren des Startwerts, während der parametrisierte Konstruktor einen Int32-Wert auf Grundlage der Anzahl von Ticks in der aktuellen Zeit annehmen kann. Da die Uhr jedoch eine endliche Auflösung hat, werden durch das Erstellen von unterschiedlichen Random-Objekten mit dem parameterlosen Konstruktor unmittelbar nacheinander Zufallszahlengeneratoren erstellt, die identische Sequenzen von Zufallszahlen erzeugen.

http://msdn.microsoft.com/de-de/library/vstudio/system.random.aspx
Martin Dauskardt schrieb am 11/15/2013:
delete this:

string ret = string.Empty;
MichaHo schrieb am 3/19/2020:
Hi,
hätte noch nen Einzeiler dafür:


private Random rnd = new Random();
public string CreatePassword(int pwLength, string allChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789!@$?_-[](){}=§$%#&/")
{
return new string(Enumerable.Repeat(allChars, pwLength).Select(s => s[rnd.Next(s.Length)]).ToArray());
}


Grüße
Martin Dauskardt schrieb am 10/16/2020:
Nach 14 Jahren würde ich sagen, die so erzeugten Passwörter sind Müll.

Mit dieser Methode können auch zufällige Passwörter in dieser Form entstehen: 123456..., ABCDEFG...
Damit hätte man dann nichts gewonnen. Es muss sichergestellt werden, dass auch mindestens jeweils ein Zeichen aus dem jeweiligen Pool enthalten ist (Groß- Kleinbuchstaben, Zahlen, Sonderzeichen etc.).
Das Thema Wörterbücher vernachlässige ich hier mal.

https://www.bsi-fuer-buerger.de/BSIFB/DE/Empfehlungen/Passwoerter/passwoerter_node.html
 

Logge dich ein, um hier zu kommentieren!