Documente Academic
Documente Profesional
Documente Cultură
.
După cum sugerează şi numele, numere pseudo-aleatoare nu sunt cu adevărat aleatorii. mai
degrabă, ele sunt generate cu o formulă matematică. Numerele pseudo-aleatoare au caracteristica
că acestea sunt complet previzibile dacă ştiţi ³sămânţă´, care a început secvenţa şi algoritmul ,
iar in scopul de a genera parole, predictibilitatea nu este o caracteristică de dorit. generarea
de numere pseudo-aleatoare trebuie sa fie aleasa o ³sămânţă´ bună. Seminţele trebuie să fie
unele cu adevărat aleatorii şi trebuie alese dintr-un spaţiu destul de mare de posibilităti.
În prezent în logistitica celor mai multe organizaţii se impune folosirea unui anumit
număr de caractere pentru parole ,cu o anumită complexitate şi reguli pentru schimbarea ei.
Pentru administratorii de sistem, generarea unei parole este un element important pentru
menţinerea unui mediu sigur. Administratorul de sistem trebuie să se asigure că fiecare cont are o
parola care este cunoscut doar pentru utilizator şi nu este uşor de ghicit de către alţi utilizatori Se
pleaci de la prezumţia că o parolă mai lungă de 7 caractere alfanumerice este mai greu de spart
decât una mai scurtă.
Crearea acetor tipuri de parole are la bază alegerea unui număr/vector utilizat pentru
iniţializarea unui generator de numere pseudo-aleatoare, această alegere este crucială pentru
securitate .Acest număr este folosit pentru crearea următoarelor secvenţe de numere aleatoare .
Aşa cum este de asteptat, dacă intotdeauna se va alege acelaşi număr iniţial ,se va obţine aceiaşi
secvenţă de numere aleatoare .Pentru ca numărul iniţial să varieze de fiecare dată se foloseşte un
!
" numit # $În majoritatea problemelor se
foloseşte iniţializarea % &'((unde RANDOM conţine la fiecare accesare un număr
aleator între 0 şi 32767 , iar ³((´ reprezintă identificatorul de process (# ).Acest numar poate
fi usor generat si afisat prin comanda !( % &$
Exista mai multe tipuri de generare a parolelor pseudo-aleatoare de tip intreg .Se poate
stabili ca numărul sa fie cuprins intre 1 si o limită maximă ,de asemenea se poate genera o
valoare aleatoare după o limită inferioara sau se pot stabili numere pseudo ±aleatoare de o
dimensiune fixată prin adaugarea de zero-uri in fata numărului pentru a mentine dimensiunea
stabilită [
Este foarte dificil să creezi cu adevarat un număr aleator intr-un sistem computerizat.
Problema este repetabilitatea si predictibilitatea numărului O metodă foarte populară de
generare automată a parolelor pseudo aleaatoare, este utilizand o sursă reală de date aleatoare.
Multe sisteme UNIX oferă un modul de kernel, "
care utilizează sistemele de
evenimente (întrerupe traficul în reţea, etc), ca o sursă de entropie pentru a produce date reale
aleatoare. De asemenea in exemplul de mai jos pentru generarea unui numar pseudo-aleator s-a
folosit "
. Intre cele doua dispozitive de generare aleatoare "
si
/"
există o diferentă constand in faptul "
generează numere pseudo-
aleatoare de ³inaltă calitate´ generand biti aleatori pana la o limită stabilită ,si ea aleatoare ,pe
cand "
nu are această limitare .
)*
echo `</dev/urandom tr -dc A-Za-z0-9 | head -c8`
â !+ , alege primele 8 caractere aleatoare pentru formarea unei parole pseudo-
aleatoare
â " Director pentru dispozitive speciale
' /bin/bash
echo ³Vă rugăm să selectaţi o criterie de generare a parolei pseudo-aleatoare de tip numeric´
echo "1) Un număr pseudo-aleator intre 1 si o limita superioară aleasă"
echo "2) Un număr pseudo-aleator mai mare decat o valoare aleasă"
echo "3) Un număr pseudo-aleator compus din suma a 10 numere pseudo-aleatoare"
echo ³4) Un numar de dimensiune fixa intre 1 si o limita superioara´
read criteriu
case $criteriu in
-
.
!
1)RANDOM=$$
echo ³Introduti limita superioară´
read UPPER_LIMIT
RANDOM_PASS=$(($RANDOM % $UPPER_LIMIT + 1))
echo ³Parola dumneavostra este $RANDOM_PASS´;;
-
2)echo "introduceti limita inferioara"
read MIN
number=0
RANDOM=$$
while [ "$number" -le $MIN ]
do
number=$RANDOM
done
echo "Parola pseudo-aleatoare este $number";;
3)MAXCOUNT=10
RANDOM=$$
PASS=0
count=1
while [ "$count" -le $MAXCOUNT ]
do
number=$RANDOM
PASS=`expr $PASS + $number `
count=`expr $count + 1`
done
echo ³parola este $PASS´;;
-
.
!
4)UPPER_LIMIT=9999
PASSWORD=$((RANDOM % $UPPER_LIMIT + 1))
RP_LENüTH= ${'PASSWORD}
UL_LENüTH=${'UPPER_LIMIT}
((LENüTH_DIFF= UL_LENüTH ± RP_LENüTH))
case $LENüTH_DIFF in
0) echo ³$PASSWORD´;;
1) echo ³0$PASSWORD´;;
2) echo ³00$PASSWORD´;;
3) echo ³000$PASSWORD´;;
4) echo ³0000$PASSWORD´;;
5) echo ³00000$PASSWORD´;;
*)echo ³$PASSWORD´;;
Esac
'
*) echo ³optiune invalidă´
esac
â&/c%reprezintă valoarea numerelor pseudo-aleatoare
â 0%12'(3-4 5retine dimensiunea parolei pseudo-aleatoare numerice
generate
â 0%12'(3- 0#retine dimensiune limitei superioare
â[[%120 #66'0%12+ 0%1277
%120 #66retine diferenta dintre dimensiunea limitei si dimensiune parolei pentru a putea
sti cate zerouri sa adauge la palora pseudo-aleatoare creata pentru a mentine o dimenisiune fixa a
parolelor la fiecare rulare a programului
â[[77 face operatii aritmetice si atribui variabilei rezultatul obtinut specific Korn Shell
' /bin/bash
MATRIX="0123456789ABCDEFüHIJKLMNOPRSTUVWXYZabcdefghijklmnoprstuvwxyz"
echo ³Introduceti numarul de caractere al parolei´
read LENüTH
if [ ³$LENüTH´ -lt 8 ]
then
echo ³parola trebuie sa aiba minim 8 caractere´
echo ³introduceti numar carctere´
read LENüTH
fi
if [ ³$LENüTH´ ±ge 8 ]
then
while [ "${n:=1}" -le "$LENüTH" ]
do
PAROLA="$PAROLA${MATRIX:$(($RANDOM%${'MATRIX})):1}"
let n+=1
done
fi
echo "parola este $PAROLA"
ën acest exemplu:
' /bin/bash
RPASS=$(makepasswd --char=10)
echo ³parola generata este $RPASS´
Exemplu 4: Gene a ea unei pa le pseudaleata e din fişie ul c eat. (unde fişie ul
cnţine pe fieca e linie în pa te nume e, lite e şi ca acte e ):
' /bin/bash
'fişierul creat se numeşte tmp.txt şi conţine pe fiecare linie câte un caracter
FILE=tmp.txt
'ştergerea liniilor nule
sed '/^$/d' $FILE > tt
mv tt $FILE
password= '
echo ³dimensiunea parolei dorite´
read dim
i=1
while [ ³$i´ ±le $dim ]
do
random_line=$(cat $FILE | sort --random-sort | head -n 1)
password=$password$random_line
i=`expr $i + 1 '
done
echo ³$password´
â verificarea liniilor nule se face prin expresia !( în care !' şi ('
,cu niciun caracter între
â noul fişier este redirecţionat spre un alt fişier ³tt´ prin comanda (6#=iar apoi mutat în
fişierul iniţial prni comanda !
â (6#>
>!
8 alege aleator una din liniile din fişier
â ! reprezinta partea de sus a pagini
Exemplu 5: Gene a e pa lă pseudaleata e de 12 ca acte e cu ajut ul elementel unei
multimi:
' /bin/bash
MAXSIZE=12 'reprezintă dimensiunea parolei ,dimensiune ce poate fi oricand modificată
RANDOM=$$
array=(
qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASD
F ü H J K L Z X C V B N M 1 2 3 4 5 6 7 8 9 0 \ \@ \' \$ \% \^ \& \* \( \)
\ \@ \' \$ \% \^ \& \* \( \) \ \@ \' \$ \% \^ \& \* \( \) \ \@ \' \$ \%
)
' MODNUM este folosit pentru a pastra numerele aleatoare in dimensiunea multimii
MODNUM=${'array[*]}
i=0 ' un contor ce pastrează numarul de caractere generat in parola
while [ $i -lt $MAXSIZE ]
do
index=$(($RANDOM%$MODNUM))
password="${password}${array[$index]}"
let i+=1 'incrementare contor
done
echo ³Parola este $password´
â :!
se foloseste pentru ca acele caractere din array ce indeplinesc anumite functii
să isi piardă semnificatia ,astfel ca ele să devină semne si să nu mai fie comenzi
& : Ubuntu
?
Advanced Bash ±Scripting üuide (º
!
"
)
Mastering Unix Shell Scripting [# º
SHELLdorado - Shell Scripts
' /bin/bash
nume=$1
sleep 5
until who | grep "^$nume" > /dev/null
do
sleep 10
done
echo "utilizatorul $nume e beat"
echo $?
n=$?
if [ "$n" -eq 0 ]
then
echo "doriti schimbare parola?"
echo "1)yes"
echo "2)n"
read opt
case $opt in
1)echo "generarea unei noi parole aut"
new_pass=$RANDOM
echo $new_pass
passwd andu;;
2) echo "ok";;
esac
fi
' /bin/bash
MAXSIZE=12
array1=(
qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASD
F ü H J K L Z X C V B N M 1 2 3 4 5 6 7 8 9 0 \ \@ \' \$ \% \^ \& \* \( \)
\ \@ \' \$ \% \^ \& \* \( \) \ \@ \' \$ \% \^ \& \* \( \) \ \@ \' \$ \%
)
MODNUM=${'array1[*]}
i=0
while [ $i -lt $MAXSIZE ]
do
index=$(($RANDOM%$MODNUM))
password="${password}${array1[$index]}"
let i+=1
done
echo ³$password´
' /usr/bin/perl
sub randomPassword {
my $password;
my $_rand;
my $password_length = $_[0];
if ( $password_length) {
$password_length = 10;
}
srand;
for (my $i=0; $i <= $password_length ;$i++) {
$_rand = int(rand 71);
$password .= $chars[$_rand];
}
return $password;
}
print "\n\nRandom Password = ", randomPassword(9);
The
[7 function sets its argument as the seed for a new sequence of pseudo-random integers to be returned by
[7. These
sequences are repeatable by calling
[7 with the same seed value.
If no seed value is provided, the [7 function is automatically seeded with a value of 1.
The [7 function returns a value between 0 and RAND_MAX. The [7 returns no value.
? ?