Portál AbcLinuxu, 12. května 2025 08:22
ftpasswd
, zda tmu tak opravdu je, a pak si někde implementovat funkci (pokud to žádná existující utilita neumí), která bude pouze ověřovat heslo – tj. vezme zadané heslo a zadaný salt, vytvoří hash a porovná s předchozím hashem.
q: proc ftpasswd generuje v zavislosti na case 2x ruzne hashe pro 1 stejny text? a: login: test passw: 123456 ziskam po 2x spustenich tyto retezce jako heslo: $1$mnoliFFT$nxvvGaZ88IxqBizWUq15j1 $1$tJ5rHRbh$hEyQtOEwSKLBTP27nQZT0. $1$UVPtJdhz$YWpwodkQGKewWB9z6zAXp0 toto jsou uplne 3x jine hashe, ale v pripade, ze se tyto retezce pokusi ftpasswd zmenit, tak pozna, ze se jedna o stejne heslo. proc? reseni je asi zde (ftpasswd, radky: 349; pro verzi: 1.1.3): my ($curpasswd, @junk) = find_passwd_entry(name => $name); my $hash = crypt($passwd, $curpasswd); if ($hash eq $curpasswd) { ... } funkce: 'find_passwd_entry' zjisti udaje o uzivateli a vrati: return ($pass, $uid, $gid, $gecos, $home, $shell); tj. 1. argument je aktualni heslo v hash-podobe, potom je to pole v @junk prikazem: crypt zasifrujeme/hashujeme 'passwd' pomoci salt-u 'cur-passwd' a ziskame hash, ktery by mel byt uplne identicky jako hash curpasswd a ejhle ono to funguje: #!/usr/bin/perl # my ($curpasswd, @junk) = find_passwd_entry(name => $name); # my $hash = crypt($passwd, $curpasswd); # if ($hash eq $curpasswd) { # ... # } $p='$1$mnoliFFT$nxvvGaZ88IxqBizWUq15j1'; $p='$1$tJ5rHRbh$hEyQtOEwSKLBTP27nQZT0.'; $p='$1$UVPtJdhz$YWpwodkQGKewWB9z6zAXp0'; $h=crypt('123456', $p); print "\n= = =\n".$p."\n".$h."\n"; output: = = = $1$UVPtJdhz$YWpwodkQGKewWB9z6zAXp0 $1$UVPtJdhz$YWpwodkQGKewWB9z6zAXp0
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.