IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mot de passe aléatoire avec a-z, A-Z et 0-9 [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Mot de passe aléatoire avec a-z, A-Z et 0-9
    Bonjour.

    Je tente de créer un petit script PHP pour générer un mot de passe aléatoire qui contiendrait
    5 chiffres, 5 majuscules et 5 minuscules.

    Ce que j'ai tenté de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $num=range(0,9);
    $maj=range('a','z');
    $min=range('A','Z');
     
    $rnum=array_rand($num, 5);
    $rmaj=array_rand($maj, 5);
    $rmin=array_rand($min, 5);
     
    ?>
    En premier, je vais chercher mes intervales de chiffres et lettres, ensuite, je tente d'aller chercher 5 de chaque catégorie.
    Mais, ça me donne que des chiffre.

    Ensuite, j'ai tenté Array_merge pour fusionner mes trois variable de tableau $rnum, $rmaj et $rmin, ça ne fonctionne pas.
    Alors, j'ai tenté implode, ça aussi, ne marche pas.

    Ce que je veux faire, c'est de fusionner les trois variables et mélanger le tout pour être utilisé dans une base de données
    ou ailleurs.

    J'ai besoin de l'aide.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par dancom5 Voir le message
    En premier, je vais chercher mes intervales de chiffres et lettres, ensuite, je tente d'aller chercher 5 de chaque catégorie.
    Mais, ça me donne que des chiffre.
    les chiffres sont les clés du tableau, c'est expliqué dans la documentation http://php.net/array_rand

    pour récupérer les valeurs au lieu des clés, vous pouvez utiliser http://php.net/array_flip comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $donnees = [
        range(0, 9),
        range("a", "z"),
        range("A", "Z"),
    ];
     
     
    $motDePasse = "";
     
    foreach ($donnees as $tab) {
        // ajout de chaque paquet de 5 caractères
        $motDePasse .= implode("", array_rand(array_flip($tab), 5));
    }
     
    // mélange des caractères
    $motDePasse = str_shuffle($motDePasse);

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci mathieu.

    Array_flip je ne connaissait pas.

    Si je voulais mettre 3 pour les chiffres, 10 pour les minuscules et 7 pour les majuscule, j'aurais fait comment?

    Ça change toute les ligne qui contient 5.

    Il se pourrait bien que mes quantités changent.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il y a aussi cette approche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $data = array_map('str_shuffle', [
        'digit' => '0123456789',
        'lower' => 'abcdefghijklmnopqrstuvwxyz',
        'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ]);
     
    $nb_digit = 3;
    $nb_lower = 10;
    $nb_upper = 7;
     
    $pwd = str_shuffle(
        substr($data['digit'], 0 , $nb_digit).
        substr($data['lower'], 0 , $nb_lower).
        substr($data['upper'], 0 , $nb_upper)
    );
     
    echo $pwd;
    Attention, c'est pour du mot de passe de dépannage (si l'on peut dire ^^), en aucun cas cela doit être utilisé dans un cadre où la sécurité est essentielle ou la cryptographie

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour Rawsrc.

    Votre solution me plaît bien puisque je peux ajouter d'autres type de caractères si je veux.

    Attention, c'est pour du mot de passe de dépannage (si l'on peut dire ^^), en aucun cas cela doit être utilisé dans un cadre où la sécurité est essentielle ou la cryptographie
    Pourquoi ça ne pourrait pas être sécuritaire?

    Je pourrait ajouter une commande rand avec un truc à microseconde.

    Merci pour cette solution.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Si tu t'intéresse un peu à la problématique de la sécurité informatique, tu te rendras très vite compte qu'il est très difficile pour un ordinateur de générer des valeurs réellement "aléatoires". On va parler très souvent de valeurs pseudo-aléatoires. Cela implique que ces valeurs deviennent prévisibles. Bonjour la faille... être capable de prévoir tes clés et autres mots de passe...

    tiens un lien externe avec des captures te montrant les trames produites par les fonctions de génération de valeurs aléatoires en PHP.

    Donc niveau sécurité, str_shuffle est inapte, par contre tu peux jouer sur une génération aléatoire du nombre de caractères de chaque type voulu en utilisant mt_srand().

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour Rawsrc.

    [FONT=courrier]mt_srand[/FONT] initialise une meilleure valeur aléatoire avec [FONT=courrier]seed[/FONT] .

    j'ai essayé dans mon code d'appliquer ça et je n'ai pas de résultat.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par dancom5 Voir le message
    ...mettre 3 pour les chiffres, 10 pour les minuscules et 7 pour les majuscule...
    Tu penses sans doute améliorer la sécurité, mais tu te trompes.

    Sans faire de calculs de statistiques (ce n'est pas mon fort), tu diminues le nombre de valeurs possibles.

    Ainsi, tu exclues les mots de passe contenant plus de 3 chiffres, plus de 10 minuscules, plus de 7 majuscules.

    Ça diminue d'autant les valeurs à chercher...

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    La seule règle efficace pour la sécurité d'un mot de passe c'est sa longueur.
    Aujourd'hui n'importe quel mdp de moins de 8 caractères est cassable en quelques secondes via des gpu.

    Un article intéressant sur le sujet :
    https://blog.codinghorror.com/passwo...-are-bullshit/
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    C'est sur que le nombre de valeurs est important. C'était dans l'optique d'être en mesure de contrôler le nombre de chaque catégorie.
    Et aussi, le fait d'appliquer une fonction qui mélange les valeurs permet d'être moins prévisible.

    C'est pour cela que je cherchais d'avoir au moins des caractères des majuscules, minucules, chiffres et des caractères spéciaux comme
    mot de passe. Et en mettre au moins 32. Le fait de pouvoir être en mesure de le faire.

    Le système à mot de passe, c'est ça rien d'autres. J'ai pas vu comment appliquer mt_srand() encore chose que je me tarde à connaître.
    J'ai pas compris dans quelle circonstance qu'on peut l'appliquer.

    Je croyais pouvoir l'appliquer comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $tableau="abcde...."; mt_srand($tableau).
    j'ai vite compris que je ce ne marche pas.

    Je mets RÉSOLU cependant, je suis intéressé à développer plus. J'ai vu les graphiques sur le rand(), intéressant.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut;

    un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $data = array_map('str_shuffle', [
        'digit' => '0123456789',
        'lower' => 'abcdefghijklmnopqrstuvwxyz',
        'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ]);
     
    mt_srand();
    $nb_digit = mt_rand(8, 20);
    $nb_lower = mt_rand(8, 20);
    $nb_upper = mt_rand(8, 20);
     
    $pwd = str_shuffle(
        substr($data['digit'], 0 , $nb_digit).
        substr($data['lower'], 0 , $nb_lower).
        substr($data['upper'], 0 , $nb_upper)
    );
     
    echo $pwd;
    ça reste du bricolage...
    Si tu dois absolument obtenir un résultat secure, tu dois soit utiliser PHP 7.x qui embarque nativement des fonctions éprouvées de génération de valeurs aléatoires soit te rabattre sur une lib dédiée quand tu codes sous PHP < 7.x du genre celle-ci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/01/2017, 13h33
  2. Mot de passe MySQL avec phpMyAdmin
    Par FredMines dans le forum Outils
    Réponses: 1
    Dernier message: 11/12/2006, 22h59
  3. [Sécurité] Crypter un mot de passe UNIX avec PHP
    Par dom78 dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2006, 19h28
  4. [framework]génération de mot de passe aléatoire
    Par seb_fou dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 13/02/2006, 13h14
  5. Réponses: 5
    Dernier message: 30/11/2004, 17h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo