Homepage Inspire-world | Forum
Generierung von Zufallszeichenketten für Passwörter oder ID's

 Inhaltsverzeichnis/Workshops Übersichtsseite/Generierung von Zufallszeichenketten für Passwörter oder ID's
Vorwort:

In diesem Workshop geht es darum verschiedene Arten von Zufallszeichenketten zu erzeugen und diese bei Bedarf auch zu verschlüsseln mittels des crypt Befehles. Um diese Funktion "multifunktionell" zu machen habe ich hierfür eine eigene Subroutine geschrieben. Diese liefert, je nach übergebenen Parametern, verschiedene Ergebnisse zurück. Auch die Länge der zu generierdenden Zeichenkette ist variablel.



Das komplette Script

#!/usr/bin/perl

#Fehlerausgabe an Browser
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/html\n\n";

# Aufruf der Subroutine mit Parametern
$randomid = &pw_gen("8","3","1");

# Ausgabe der erzeugten ID
print "$randomid";


# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Generiert Zufalls ID fuer Passwoerter und dergl.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub pw_gen {

# Benutzung:
# $randomid = &pw("8", "3", "0");
# 8 = Laenge der zu generierenden ID
# Parameter 1, 2 oder 3
# 1 = ID nur aus Buchstaben
# 2 = ID nur aus Zahlen
# 3 = ID aus Zahlen und Buchstaben
# 3. Parameter 0 oder 1
# ID crypten Nein - JA


my ($length,$mix,$crypt_jn) = @_;

# Wenn Parameter Laenge nicht angegeben, 8 als Standardwert setzen
unless ($length) {
$length = 8;
}
# Wenn kein Parameter der zu verwendenden Zeichengruppe
# angegeben wurde, 3 als Standardwert setzen
unless (($mix == 1 || $mix == 2 || $mix == 3)) {
$mix = 3;
}

# Wenn kein Parameter fuer Crypt angegeben
# ID nicht crypten
unless ($crypt_jn) {
$crypt_jn = 0;
}

my @za = ();
my @Zeichen = ();
my $zufall = "";
my $passwort = "";
# - - - - - - - - - - - - - - - - - - >
if ($mix == 1) {
@Zeichen = qw(A B C D E F G H J K L M N P Q R S T U V W Y Z
a b c d e f g h j k m n p q r s t u v w y z);

foreach (0..$length-1) {
$zufall = rand(@Zeichen);
push(@za, $Zeichen[$zufall]); 
}
$passwort = join("",@za);
# - - - - - - - - - - - - - - - - - - <
# - - - - - - - - - - - - - - - - - - >
} elsif ($mix == 2) {

@Zeichen = qw(0 1 2 3 4 5 6 7 8 9);

foreach (0..$length-1) {
$zufall = rand(@Zeichen);
push(@za, $Zeichen[$zufall]); 
}
$passwort = join("",@za);
# - - - - - - - - - - - - - - - - - - <
# - - - - - - - - - - - - - - - - - - >
} elsif ($mix == 3) {

@Zeichen  = qw(A B C D E F G H J K L M N P Q R S T U V W Y Z 0 1 2 3 4 5 6 7 8 9
a b c d e f g h j k m n p q r s t u v w y z);

foreach (0..$length-1) {
$zufall = rand(@Zeichen);
push(@za, $Zeichen[$zufall]); 
}
$passwort = join("",@za);
}
# - - - - - - - - - - - - - - - - - - <
# - - - - - - - - - - - - - - - - - - >
# ID crypten?

if ($crypt_jn == 1) {
$salt = "dx";
$passwort = crypt($passwort, $salt);
}
# - - - - - - - - - - - - - - - - - - <

return $passwort;
}



Erläuterungen dazu

1. Aufruf der Subroutine und ausgabe des Wertes
# Aufruf der Subroutine mit Parametern
$randomid = &pw_gen("8","3","1");

# Ausgabe der erzeugten ID
print "$randomid";
Hier wird die Subroutine mitden gewünschten Parametern aufgerufen. Lässt man die Parameter alle oder Teile davon weg liefert die Subroutine die voreingestellten Standardwerte.

2. Die Subroutine und deren Funktionen
Zu Beginn der Routine, sozusagen als "Gedächtnisstütze", eine Mini Bedienungsanleitung.
# Benutzung:
# $randomid = &pw("8", "3", "0");
# 8 = Laenge der zu generierenden ID
# Parameter 1, 2 oder 3
# 1 = ID nur aus Buchstaben
# 2 = ID nur aus Zahlen
# 3 = ID aus Zahlen und Buchstaben
# 3. Parameter 0 oder 1
# ID crypten Nein - JA
Hier nun übernimmt die Subroutine die ihr übergebenen Parameter
my ($length,$mix,$crypt_jn) = @_;
Im jetzt folgenden Block werden die Standardparameter zugewiesen für den Fall das keine, oder nur Teile der Parameter angegeben wurden. Der Befehl unless bedeutet hier: "wenn nicht, wenn kein". Also: Wenn kein Parameter für die Länge $length angegeben wurde, setze Länge auf 8 Zeichen.
# Wenn Parameter Länge nicht angegeben, 8 als Standardwert setzen
unless ($length) {
$length = 8;
}
Hier wird mittels "oder", bezeichnet durch || abgefragt ob für die zu verwendende Zeichengruppen ein Parameter vorhanden ist. Also ist kein Parameter 1 oder 2 oder 3 vorhanden nimm 3 als Standard.
# Wenn kein Parameter der zu verwendenden Zeichengruppe
# angegeben wurde, 3 als Standardwert setzen
unless (($mix == 1 || $mix == 2 || $mix == 3)) {
$mix = 3;
}

# Wenn kein Parameter für Crypt angegeben
# ID nicht crypten
unless ($crypt_jn) {
$crypt_jn = 0;
}
3. Die Unterabschnitte der Subroutine
In den nun folgenden Unterabschnitten, getrennt durch if - elsif, werden die übergebenen Parameter "angewendet".
if ($mix == 1) {
@Zeichen = qw(A B C D E F G H J K L M N P Q R S T U V W Y Z
a b c d e f g h j k m n p q r s t u v w y z);

foreach (0..$length-1) {
$zufall = rand(@Zeichen);
push(@za, $Zeichen[$zufall]); 
}
$passwort = join("",@za);
Das Array @Zeichen enthält die zur Generierung nötigen Zeichen. Das qw erspart hierbei das man die Zeichen mittels "A","B", usw. notieren muss.

In der nun folgenden foreach Schleife wird soviele male ein Zufallszeichen per rand aus dem Array @Zeichen ermittelt wie die angegebene Länge $length beträgt. Das -1 deshalb um die Anzahl zu berichtigen. Denn 0 - 8 ergäbe 9 Zeichen.

Nun werden die erzeugten Zufallszeichen mittels push in das Array @za gepusht.

Am Schluss wird dann per join das Array @za der Variable $passwort zugewiesen. Join bedeutet soviel wie zusammenfügen.

4. Die erzeugte Zeichenkette verschlüsseln?
# ID crypten?

if ($crypt_jn == 1) {
$salt = "dx";
$passwort = crypt($passwort, $salt);
}
Am Schluss der Subroutine wird nun, je nach Parameter, entschieden ob verschlüsselt wird oder nicht. Das "Salz" $salt = "dx"; ist dabei eine frei wählbahre 2 stellige Zeichenkombination.

Mittels $passwort = crypt($passwort, $salt); wird dann die Zeichenkette verschlüsselt wenn der Parameter dafür angegeben wurde.

Am Subroutinenende wird dann per return der Wert $passwort zurückgegeben.
return $passwort;



 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Generierung von Zufallszeichenketten für Passwörter oder ID's
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!