Créer un mot de passe sécurisé est quelque chose d'important. Dans un script pour un client, j'ai crée un formulaire de création d'utilisateur afin de centraliser l'ensemble des actions nécessaires (création du compte AD, attribution des groupes de sécurité, création du partage NetApp, modification des ACL sur l'espace personnel utilisateur), mais les utilisateurs n'avaient que peu d'affection pour les mots de passe que mon script générait automatiquement.

Bon, peut être un mot de passe tel que !A@@#%75;$$ n'est pas forcément aisé à saisir, mais ce n'est qu'une seule fois... et au bout de 5 utilisateurs qui bloquent leur compte fraîchement créé, j'ai du adapter mon script pour quelque chose de plus "agréable" sans pour autant lésiner sur la sécurité.

J'ai donc crée une fonction simple mais pratique, qui permet d'avoir un mot de passe à la fois facile à retenir, à taper, et sécurisé.

Comment faire?

Nous créons tout d'abord un dictionnaire de mots, 26 séries de 3 mots, pour 26 lettres, et un nombre aléatoire entre 0 et 9999, toujours affiché sur 4 chiffres. Nous sélectionnons deux mots, ainsi qu'un chiffre, et nous affichons cela dans un ordre aléatoire.


Script final.

function Create-Pass {
    $result = New-Object System.Collections.ArrayList
    $dictionnaire = New-Object System.Collections.ArrayList
    $dictionnaire.AddRange(@(
    @("Arbre","Amont","Assiette"),
    @("Bouleau","Bateau","Barque"),
    @("Chenille","Canard","Client"),
    @("Drap","Domaine","Dolmen"),
    @("Echelle","Escabeau","Evident"),
    @("Frigo","Froid","France"),
    @("Graphique","Grand","Grive"),
    @("Hirondelle","Hibou","Herbe"),
    @("Ignam","Invite","Isidore"),
    @("Jeudi","Jaune","Jeune"),
    @("Koala","Kabuki","Kaki"),
    @("Lama","Loutre","Large"),
    @("Marsouin","Monstre","Michel"),
    @("Nouveau","Nature","Noire"),
    @("Orange","Oubli","Organe"),
    @("Pierre","Poutre","Pieds"),
    @("Quatre","Quand","Quatuor"),
    @("Rouge","Ranger","Rongeur"),
    @("Sophie","Salon","Super"),
    @("These","Tamis","Truelle"),
    @("Unique","Usage","Ultime"),
    @("Verre","Voir","Verifier"),
    @("Wapiti","Wagon","Walter"),
    @("Xenon","Xanthie","Xeres"),
    @("Yack","Yacht","Yaourt"),
    @("Zebre","Zouave","Zeste")
    ))
    #On crée un nombre au hasard
    $rand = "{0:D4}" -f (Get-Random -Minimum 0 -Maximum 9999)
    #On prend une lettre au hasard, et un indice entre 0 et 3 pour un mot aléatoire dans la lettre choisie, on ajoute la selection à la liste
    $result.Add($dictionnaire.Item($(Get-Random -Minimum 0 -Maximum $($dictionnaire.Count)))[$(Get-Random -Minimum 0 -Maximum 3)]) | Out-Null
    #On recommence, pour avoir 2 mots
    $result.Add($dictionnaire.Item($(Get-Random -Minimum 0 -Maximum $($dictionnaire.Count)))[$(Get-Random -Minimum 0 -Maximum 3)]) | Out-Null
    #On ajoute le nombre aléatoire
    $result.Add($rand) | Out-Null
    $password = $null
    0..2 | foreach {
        #On selectionne une entrée au hasard dans la liste précedente des elements choisis aléatoirement
        $index = get-random -Minimum 0 -Maximum $($result.Count)
        #On ajoute le mot choisi à la chaine de résultat
        $password += $result[$index]
        #On retire l'objet ajouté de la liste pour pouvoir tirer un nouvel élement à ajouter
        $result.RemoveAt($index)

    }
 return $password

}

Le résultat est le suivant :

password

Si vous souhaitez enregistrer le mot de passe dans une variable, rien de plus simple.

password2

Et si vous souhaitez convertir le mot de passe aléatoire en type sécurisé utilisable pour une action sécurisée (comme l'attribuer à un compte Windows)

password3

Ajouter un commentaire

Article précédent Article suivant