NFsec Logo

Generator (pseudo-)losowych haseł

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

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.