Wie kann ich ein zufälliges Passwort generieren?
(
Autor: BPA & perl-community)
Oft soll zufällig ein Passwort generiert werden. Wie dies realisiert werden kann, soll hier gezeigt werden.
1. Einfaches Passwort aus 8 Zahlen
2. Passwort aus Buchstaben, Zahlen, Sonderzeichen
3. (kritische) Anmerkungen zum "Erschaffen" von Zufallszahlen.
Grundsätzlich ist zu sagen, dass es "weniger sichere" und
"sicherere" Passwörter gibt. Wirklich "sicher" ist, wie immer
nur, dass nichts sicher ist ...
1. Hier wird ein einfaches Passwort aus 8 Zahlen generiert
#!/usr/bin/perl -w
use strict;
my $passwort;
my $i=0;
my @numbers;
while ($i < {
$numbers[$i] = int(rand(10));
$i++;
}
$passwort = join("", @numbers);
print "Das Passwort ist $passwort";
Über eine
while-Schleife erzeugen wir acht zufällige Zahlen aus dem
Vorrat 0..9 {Dies geschieht mittels
rand(10)}. Wie bei einem Array, wird
hier bei 0 begonnen!). Diese werden als Elemente in einem Array (@numbers)
abgelegt. Anschließend wird mittels
join aus den einzelnen Arrayelementen
ein einziger String generiert (Es wird kein Zeichen, zwischen den einzelnen
Elementen abgelegt, weil zwischen den beiden Anführungszeichen nichts steht).
Dies ist ein "weniger gutes" Passwort, da nur die Zahlen
0 bis 9 vorkommen. Mit einem
BruteForce? Angriff wäre dies
wohl relativ einfach zu knacken.
2. Ein Passwort aus einem größeren Zeichenvorrat generieren
#!/usr/bin/perl -w
use strict;
my $passwort;
my @chars;
@chars = ("A" .. "Z", "a" .. "z", 0 .. 9, qw(! @ $ % ^ & *) );
$passwort = join("", @chars[ map {rand @chars } (1 .. 8) ]);
print "Das Passwort ist $passwort";
Grundsätzlich geben wir hier ein Array an, dass den "Zeichenvorrat"
speichert (@chars). Den Folgenden Ausdruck betrachten wir von innen
nach außen.
map sorgt dafür, dass der Ausdruck
rand @chars (der ein
Zeichen zufällig aus dem Zeichenvorrat wählt) für jedes Element der
nachstehenden Liste (1..8) evaluiert wird. Dies entspricht eigentlich der
while-Schleife im ersten Beispiel, da jedoch Perlprogrammierer von Natur
aus faul sind (Nein, sie wollen eigentlich nur effizient arbeiten.) und
es mittels
map kürzer geht, bevorzugen wir dies.
Wir erhalten also ein Array mit acht zufällig gewählten Zeichen aus dem
Zeichenvorrat.
Nun fügen wird diese acht Zeichen mit Hilfe von
join zu einem String
zusammen.
Dieses Passwort ist "sicherer" als das erste. Für Foren usw.
sollte es ausreichen. Wenn Sie in ihrem Keller geheime
Regierungsakten sichern, sollten Sie grundsätzlich zu einer
anderen Methode greifen.
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden:
---### Main.??? - 14 Jul 2003 - Betreff