Generator (pseudo-)losowych haseł
Napisał: Patryk Krawaczyński
29/03/2011 w Administracja Brak komentarzy. (artykuł nr 308, ilość słów: 556)
C
zasami zachodzi potrzeba założenia określonej ilości kont dla użytkowników oraz ustawienia im haseł. W tym momencie może przydać się prosty generator haseł obsługiwany z linii poleceń. Może to być na przykład prosta funkcja napisana w powłoce bash (nano ~/.bashrc):
genpasswd() { local l=$1 [ "$l" == "" ] && l=16 tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs } randpass() { [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]" cat /dev/urandom | tr -cd "$CHAR" | head -c ${1:-32} echo } randompass() { MATRIX="HpZld&xsG47f0)W^9gNa!)LR(TQjh&UwnvP(tD5eAzr6k@E&y(umB3^@!K^cbOCV)" PASS="" n=1 i=1 [ -z "$1" ] && length=8 || length=$1 [ -z "$2" ] && num=1 || num=$2 while [ ${i} -le $num ]; do while [ ${n} -le $length ]; do PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}" n=$(($n + 1)) done echo $PASS n=1 PASS="" i=$(($i + 1)) done }
Wczytujemy wprowadzone zmiany:
source .bashrc
Generujemy hasło o określonej długości:
agresor@stardust:~$ genpasswd 12 cYBrB3BjKTNo agresor@stardust:~$ randpass 12 12 zUuhCoJ(?(e1 agresor@stardust:~$ randompass 12 1 3^@&aRUZTy(!
Możemy również skorzystać z bardziej zaawansowanego programu napisanego w Perlu przez Rob’a Levin’a: makepasswd, który generuje losowe hasła z możliwością ich solenia oraz przedstawiania już w formie zaszyfrowanej funkcją szyfrującą crypt() (opierająca się na algorytmie Data Encryption Standard – DES) lub funkcją skrótu MD5. Na przykład jeśli chcemy wygenerować 5 haseł o długości 12 znaków z określonego zestawu znaków możemy użyć polecenia:
makepasswd --chars=12 --count=5 --string='ABCabc,./>/?;:"[]{}\|`!@#$%^&*()-_=+<'
Co w konsekwencji zwróci nam:
{)/a^;a$+]b/ #&<_/|@*!ba( -=$^C"%$cc}) {?{_*(b=*b\B <!#A^&>*b;:/
Wariant z szyfrowaniem i soleniem:
makepasswd --chars=12 --count=5 --crypt --cryptsalt=128
Co w konsekwencji zwróci nam:
WfD0wyQ3XQrU b/Iospor6hT8k 2wWU8c71scdj b/XED7FNkFmLg 9A6ohiKpHmiC b/nPWrcxkgMFE UAtw4gYDNrSV b/gvPQVU26HLE rdRvRj2uQTod b/GTsxFU2HNdk
Jeśli interesują nas inne rodzaje szyfrowania haseł wraz z procesem ich generowania to Pierre Pronchery zainspirowany programem Rob’a stworzył program o takiej samej nazwie w języku C. Obsługuje on dodatkowo Base64, SHA-1, SHA256 oraz Blowfish. W dodatku korzysta w standardzie z bardziej rozbudowanego zestawu znaków (A-Za-z0-9`~!@#$%^&*()-_=+) niż jego perlowy odpowiednik.
makepasswd -l 12 -n 5
Co w konsekwencji zwróci nam:
mQP$=nJy9SK7 )^~m79)ziTBm %~2beP(tg&Gp R7D=sa$dO=oJ -4Aiw^wZuA%%
Więcej informacji: man urandom