Bedeutung von $salt ?
Alain
- cgi
Guten Tag,
mich würde es interessiern für was genau $salt in perl od. cgi eingesetzt wird und wesshalb.
Ich weiss das z.B. für verschlüsselung von passwörter das $salt benutzt wird um die basis vom schlüssel zu bilden.
Ich habe auch gesehen dass bei php auf einer seite den $salt=21 und bei selfhtml $salt=IN benutzt wird,in einem anderem cgi sah ich das "YL" ($password = crypt($request{'password1'}, "YL");
).
Was ist jetzt da der unterschied ausser dass bei den beiden Arten am Anfang vom verschlüsselten passwort 21,IN oder YL steht?
Sind das irgendwelche zusatz codes oder ist das einfach nur die kennung als basis?
Wie ist das,kann man für dieses $salt auch einen beliebigen tag nehmen sozusagen als eigenes und einmaliges basis tag?
Schönen gruss vom Alain
P.S.Ich fand weder in selfhtml noch in einer suchmaschiene genaueres darüber.
hi!
Ich weiss das z.B. für verschlüsselung von passwörter das $salt
benutzt wird um die basis vom schlüssel zu bilden. Ich habe auch
gesehen dass bei php auf einer seite den $salt=21 und bei selfhtml
$salt=IN benutzt wird,in einem anderem cgi sah ich das "YL"
($password = crypt($request{'password1'}, "YL");).
Der Salt hat eigentlich nur einen Zweck: wenn zwei Leute das gleiche
Passwort eingeben, und es gäbe keinen Salt, dann würde in beiden
Fällen das verschlüsselte Passwort gleich aussehen, und man wüsste,
das die beiden Benutzer das gleiche Passwort haben.
Um das zu verhindern, gibt man bei der Verschlüsselung des Passworts
noch ein Salt an. Das sind zwei alphanumerische Zeichen, die man am
besten bei jedem Verschlüsselungsvorgang zufällig auswählen lässt, um
eben das oben beschriebene Szenario zu vermeiden.
bye, Frank!
'nAbend
Um das zu verhindern, gibt man bei der Verschlüsselung des Passworts
noch ein Salt an. Das sind zwei alphanumerische Zeichen, die man am
besten bei jedem Verschlüsselungsvorgang zufällig auswählen lässt, um
eben das oben beschriebene Szenario zu vermeiden.
Und dann wird's Salt vorn an das verschlüsselte Passwort angehangen, um später beim Passwortvergleich zum richtigen Ergebnis zu kommen. Denn wer weis denn dann noch, wie die das Salt bei der Kodierung aussah!?!
Gruß Frank
siehe auch http://forum.de.selfhtml.org/archiv/2000_1/t11109.htm#a55999
'nAbend
guten Morgen :),
ok das hab ich begriffen aber zum zitat vom link da unten:
"Man braucht eben noch einen zusätzlichen (variablen) Parameter, der bei
immer gleichem Algorithmus und möglicherweise gleichem Passwort unterschiedliche Ergebnisse
bringt.Wenn der User sich dann authorisiert, muß "salt" bekannt sein, damit das Ergebnis des
erneuten "crypten" des angegebenen Passwortes mit dem z.B. in .htpasswd vergleichbar wird. "
Wie sieht denn diese zusätzliche variable aus?
In meinem beispiel würde das nicht funktionieren:
sub docrypt {
my $salt='XY';
local($text) = @_;
return crypt($text,substr($salt,-2));
}
jedes verschlüsselte passwort erhält am anfang die zwei zeichen XY
ist auch besser als wenn jetzt return crypt($text,substr($text,-2));
dasteht ,dann würde es die ersten beiden zeichen vom eigentlichen
passwort (unverschlüsselt) zeigen.
Um nochmal zum $salt zurückzukommen,wenn zwei verschiedene benutzer dasselbe passwort benutzen und dieses
vom gleichen crypt verschlüsselt würde,dann wäre das passwort verschlüsselt dasselbe auch mit diesem salt crypt verfahren.
Der Vorteil in meinem Fall sehe ich eben nur ,dass man das eigentliche passwort (die ersten beiden zeichen) nicht unverschlüsselt sieht.
Gruss vom Alain
Um das zu verhindern, gibt man bei der Verschlüsselung des Passworts
noch ein Salt an. Das sind zwei alphanumerische Zeichen, die man am
besten bei jedem Verschlüsselungsvorgang zufällig auswählen lässt, um
eben das oben beschriebene Szenario zu vermeiden.
Und dann wird's Salt vorn an das verschlüsselte Passwort angehangen, um später beim Passwortvergleich zum richtigen Ergebnis zu kommen. Denn wer weis denn dann noch, wie die das Salt bei der Kodierung aussah!?!
Gruß Frank
siehe auch http://forum.de.selfhtml.org/archiv/2000_1/t11109.htm#a55999
'nAbend
guten Morgen :),
(fast) 'nAbend
Wie sieht denn diese zusätzliche variable aus?
In meinem beispiel würde das nicht funktionieren:
sub docrypt {
my $salt='XY';
local($text) = @_;
return crypt($text,substr($salt,-2));
}
..............................^
Warum machst Du hier einen Substring? Ist doch sowieso nur 2 Zeichen lang, Dein $salt.
jedes verschlüsselte passwort erhält am anfang die zwei zeichen XY
ist auch besser als wenn jetzt return crypt($text,substr($text,-2));
dasteht ,dann würde es die ersten beiden zeichen vom eigentlichen
passwort (unverschlüsselt) zeigen.
Warum machst Du es nicht so:
@passset = ('a'..'z');
for ($i = 0; $i < 2; $i++) {
# besorge Die eine Zufallszahl, die so groß
# ist wie der Satz von Zeichen
$randum_num = int(rand($#passset + 1));
# lies mit dieser Zahl ein beliebiges Zeichen
# aus dem Array
$salt .= @passset[$randum_num];
}
return crypt($pass1,$salt);
So hast Du bei jedem Crypt eine anderes $salt. Du hast eben nicht die ersten beiden Zeichen des Passworts im Klartext da zu stehen und selbst bei gleichem Passwort sieht der gecryptete String anders aus.
Gruß Frank
Moin,
Warum machst Du es nicht so:
nimm einen Satz von Zeichen
@passset = ('a'..'z');
renne 2 mal durch die schleife
for ($i = 0; $i < 2; $i++) {
# besorge Die eine Zufallszahl, die so groß
# ist wie der Satz von Zeichen
$randum_num = int(rand($#passset + 1));
# lies mit dieser Zahl ein beliebiges Zeichen
# aus dem Array
$salt .= @passset[$randum_num];
}
return crypt($pass1,$salt);
So hast Du bei jedem Crypt eine anderes $salt. Du hast eben nicht die ersten beiden Zeichen des Passworts im Klartext da zu stehen und selbst bei gleichem Passwort sieht der gecryptete String anders aus.
Gute idee,
aber ich möchte ja dass das passwort gekennzeichnet wird mit dem ersten oder den ersten beiden zeichen(aus einem bestimmten Grund)
jedoch wär mir das auch lieber,wenn bei einem anderen user der dasselbe passwort benutzt eine andere verschlüsselung gezeigt würde.
Gruss vom Alain
P.S.Wär das auch möglich?