Non plus sérieusement, dans le cadre d'un devoir en html et en php je dois concevoir un site web qui lors de la création d'un compte doit créer un mot de passe aléatoire unique répondant aux critères suivants :
- Commence par une majuscule ;
- Termine par un chiffre ;
- Fait au moins 8 caractères (en comprenant les deux conditions précédentes et en rejetant les caractères spéciaux tels que , ; : / ! & @ etc.).
Pour ce qui est de ces critères et de l'unicité j'ai déjà ma solution :
if(preg_match('#^[A-Z][[:alnum:]]{6,43}[0-9]$#',$newpass))
{
// Création du mot de passe
}
Pour l'unicité il suffit de vérifier l'existence (ou l'inexistence) d'un doublon dans la database (vous le savez déjà donc je ne vous apprends rien mais OSEF), là où je planche c'est pour générer l'aléatoire tout en respectant ces n conditions lors de la création du mot de passe généré automatiquement lorsqu'un compte est ajouté après sa création.
Cela dit, le code ci-dessous pourrait bien m'aider à me sortir de ce pétrin :
function genererChaineAleatoire($longueur = 10)
{
$caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$longueurMax = strlen($caracteres);
$chaineAleatoire = '';
for ($i = 0; $i < $longueur; $i++)
{
$chaineAleatoire .= $caracteres[rand(0, $longueurMax - 1)];
}
return $chaineAleatoire;
}
//Utilisation de la fonction
echo genererChaineAleatoire();
echo genererChaineAleatoire(20);
Tout ce que j'ai à faire c'est de les assembler correctement et prier pour que les conditions soient respectées absolument.
Dans l'éventualité où ça marcherait (ou pas), pourriez m'exposer des explications pour mieux cerner l'aléatoire en PHP (en C je sais que ce n'est pas exactement de l'aléatoire mais plutôt un tri erratique dans une liste définie par l'utilisateur), merci d'avance.
PS : J'adore les monologues, ça donne l'impression d'avoir une conversation avec autrui vers 02:15 du matin
Je ne pourrais pas exactement t'expliquer comment fonctionne l'aléatoire de A à Z en PHP car je ne me suis jamais penché sur la question. Cependant, je sais que c'est souvent nommé comme étant du pseudo-aléatoire.
Par ailleurs, n'oublie pas qu'en théorie les mots de passe ne devraient pas apparaître en clair dans la base de données. Donc je ne sais pas si tu en as besoin vue que c'est juste un devoir, mais tu peux te pencher sur ces 2 fonctions, ce sera toujours un bagage intéressant pour toi :
Pour ta sélection de lettre aléatoire, j'utiliserai plutôt random_int (si tu as PHP 7) à la place de rand, elle est normalement plus sûre car la génération se fait de manière cryptographiquement sécurisée et donc mieux adaptée pour ton cas : https://www.php.net/manual/fr/function.random-int.php.
Sinon tu peux utiliser bin2hex combiné avec openssl_random_pseudo_bytes ou encore mieux random_bytes (cryptographiquement sécurisé, mais seulement à partir de PHP 7) :
<?php
bin2hex(openssl_random_pseudo_bytes(10));
bin2hex(random_bytes(10));
// Les résultats seront des chaînes de 20 caractères contenant uniquement des chiffres et des lettres minuscules
// Exemples : "e9666ae12b1ebc1ce35f", "6073b9ed772b45ce9ddf"
?>
la question qui me vient à l'esprit est: "dois-tu créer l'algo ou as-tu le droit d'utiliser les fonctions existante?", à la lecture de ton post, je penche pour la première.
Dans ce cas, il faut utiliser une boucle DO/WHILE qui vérifierait avec une regexp la règle énoncée "une majuscule au départ, un chiffre en fin, etc..." et dans cette boucle un for qui lui aurait le rôle de créer la chaine.
Ensuite, vient l'unicité et là tu as déjà la réponse.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales