Generate a password in PHP
La sécurisation d’un mot de passe dépend du nombre de caractères différents présent dans celui-ci. Voici une solution pour rendre les mots de passe sécurisé lors de leur génération: code :
function random_password($length, $strength) {
$char_sets = array('48-57','65-90','97-122','35-38','61-64');
$new_password = '';
srand(microtime()*10000000);
for ($i=0; $i < $length; $i++) {
$random = rand(0, $strength-1);
list($start, $end) = explode('-', $char_sets[$random]);
$new_password.= chr(rand($start, $end));
}
return($new_password);
}
Cette fonction prend comme paramètres $strength
et $length
.
La variable $strength
change le nombre de caractères affectés à la taille du mot de pass :
$strength = 1:- 0-9
$strength = 2:- A-Z0-9
$strength = 3:- A-Za-z0-9
$strength = 4:- A-Za-z0-9 and # $ % &
$strength = 5:- A-Za-z0-9 and # $ % & = > ? @
Pour des mots de passe sécurisé, utiliser $strength = 5
, et pour un mot de passe facilement décriptable utiliser $strength = 1
.
$length
défini la longueur du mot de passe.
Explication du code
$char_sets = array('48-57','65-90','97-122','35-38','61-64');
$char_sets
est une table de nombre ascii qui détermine quel seront les caractères inclut dans le mot de passe.
$new_password='';
srand(microtime()*10000000);
2 lignes d’initialisation.
$new_password
sera le mot de pass final.
srand()
est nécessaire pour initialiser le générateur de nombre aléatoire. L’initialisation se fait par la fonction microtime()
.
for ($i=0; $i < $length; $i++) {
$random = rand(0, $strength-1);
list($start,$end) = explode('-',$char_sets[$random]);
$new_password.= chr(rand($start,$end));
}
Ici on genere aléatoirement les caractères en utilisant la valeur $strength pour déterminer quel caractères seront inclus.
$random = rand(0,$strength-1);
Genere un nombre aléatoirement compris entre 0 et strength - 1 ( en relation avec la table $char_sets ).
list($start,$end) = explode('-',$char_sets[$random]);
Maintenant sélectionner les caractères choisis et faire un explode() des valeurs.
$start
et $end
sont les valeurs haute et basse de la table de caractères.
$new_password.= chr(rand($start,$end));
Et sont finalement affecter à $new_password
On utilise rand()
pour générer un nombre aléatoire entre la valeur haute et basse et ensuite le convertir en caractère en utilisant chr()
.
Ensuite on répète ce processus suivant la longueur défini pas $length
.
Et l’on retourne le mot de passe.
Utilisation
echo random_password(10,1);
// would give a result like 4173967312
echo random_password(10,2);
// would give a result like HY9J3X5IF0
echo random_password(10,3);
// would give a result like EKc664aqs4
echo random_password(10,4);
// would give a result like ZY$NP26T6#
echo random_password(10,5);
// would give a result like T$@p=841=b