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

    Informations forums :
    Inscription : janvier 2010
    Messages : 770
    Points : 254
    Points
    254

    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
    6 216
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 6 216
    Points : 10 044
    Points
    10 044

    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
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations forums :
    Inscription : janvier 2010
    Messages : 770
    Points : 254
    Points
    254

    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 256
    Points : 10 446
    Points
    10 446

    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
    # Dans la Création, tout est permis mais tout n'est pas utile...

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

    Informations forums :
    Inscription : janvier 2010
    Messages : 770
    Points : 254
    Points
    254

    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 256
    Points : 10 446
    Points
    10 446

    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().
    # Dans la Création, tout est permis mais tout n'est pas utile...

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

    Informations forums :
    Inscription : janvier 2010
    Messages : 770
    Points : 254
    Points
    254

    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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    9 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 9 890
    Points : 19 883
    Points
    19 883

    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...
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    4 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 4 434
    Points : 11 340
    Points
    11 340

    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
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations forums :
    Inscription : janvier 2010
    Messages : 770
    Points : 254
    Points
    254

    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 256
    Points : 10 446
    Points
    10 446

    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
    # Dans la Création, tout est permis mais tout n'est pas utile...

+ 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 Sessions
    Réponses: 3
    Dernier message: 15/05/2006, 19h28
  4. 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