Na konci leta sme sa v niekoľkých správičkách dozvedeli, že ukazovatelia sily hesla na rozličných stránkach vlastne pracujú pomerne hlúpo, pretože miesto toho, aby kontrolovali ozajstnú silu hesla, zisťujú len počet výskytov veľkých písmien, malých písmien a číslic. Tie sofistikovanejšie ukazovatele vo výsledku ocenia aj to, ak v hesle použijete aj iný znak, ako je písmeno a číslica.
Čo nás teda v dnešom jubilejnom kole nesúťaže čaká? Práve vytvorenie takéhoto sofistikovaného nástroja na zistenie sily hesla. Pravidlá sú nasledovné:
Vytvorte "modul" (program/one-liner/funkciu) pre overenie sily hesla. Heslo bude považované za silné, ak spĺňa nasledovné podmienky:
- je dlhé minimálne 10 znakov
- obsahuje minimálne jednu číslicu
- obsahuje minimálne jedno malé písmeno
- obsahuje minimálne jedno veľké písmeno
Heslo je zložené len z ASCII znakov, pričom obsahovať môže len písmená alebo číslice. Ak sa jedná o silné heslo, vypíšte na obrazovku text "Strong password". Ak sa naopak jedná o slabé heslo, vypíšte na obrazovku "Weak password".
Tak, ako aj minule, na súťažiacich nečakajú žiadne ceny, takže sa nemáte na čo tešiť. Ale pochváliť sa svojimi výtvormi a pokusmi sa určite pochválite radi. Tak šup do práce!

ruby -e "p=ARGV[0]; if p.length >= 10 and p =~ /[0-9]/ and p =~ /[A-Z]/ and p =~ /[a-z]/ then puts 'Strong password' else puts 'Weak password' end" PassWord10#!/bin/bash passwd="$1" if [ ${#passwd} -ge 10 ] && [[ "${passwd}" =~ [A-Z] ]] && [[ "$passwd" =~ [a-z] ]] && [[ "$passwd" =~ [0-9] ]]; then echo "Strong password" else echo "Weak password" fiRiešenie v programovacom jazyku C.
perl6 -e 'subset Passwd of Str where /^ <[ a..z A..Z 0..9 ]>+ $/; subset StrongPasswd of Passwd where { .codes >= 10 }&/ \d /&/ <:Lu> /&/ <:Ll> /; multi MAIN ( StrongPasswd $ ) { say "Strong password" } multi MAIN ( Passwd $ ) { say "Week password" }' "pPpasPPpas123"#!/bin/bash if echo "$1" | egrep "^.{10,}$" | egrep "[a-z]+" | egrep "[A-Z]+" | egrep "[0-9]+"; then echo "Strong password" else echo "Weak password" fiOT: Aby někdo náhodou nenabyl dojmu, že popsaný estimátor síly hesla je ten správný směr (tj. omezování uživatele vedoucí k psaní hesel na lístečky apod.), kterým se vydat při kontrole hesel, uvedu odkaz na pokus o vytvoření skutečně kvalitního estimátoru:
https://github.com/dropbox/zxcvbn
Asi nebudem jediný ktorého by zaujimálo, čo všetko bolo zle.
nuz... kedze sa jedna o (ne)sutaz, v ktorej sa neda nic vyhrat, musi byt nejako zdovodnene, ze preco nikto ziadnu cenu neziskal. cize je to skor take slovenske na sposob - skutok sa nestal :-)
eineltevsyv az mejukaď
peeehaapeecko
echo "Enter password: "; $handle = fopen ("php://stdin","r"); $input = fgets($handle); if ((strlen($input) > 9) && (preg_match('/[A-Z]+/', $input)) && (preg_match('/[[a-z]+/', $input)) && (preg_match('/[0-9]+/', $input))) { echo "Strong paswword\n"; } else { echo "Weak password\n"; }Neskúšal som, ale v PHP by mohlo fungovať aj toto:
if (preg_match('/(?=.*.{10})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])/', $input)) {Je to trochu upravený zápis z PERLu:
'/(?=.{10})(?=[A-Z])(?=[a-z])(?=[0-9])/'