N-PN White-Hat Project
Générer un password - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : Générer un password (/showthread.php?tid=3784)

Pages : 1 2


RE: Générer un password - cacaphonie - 15-11-2014

(13-11-2014, 10h57)Junky a écrit : Bonjour,

Nice bout de code Cacophonie. Smile

Juste une petite chose (tu vas dire que je chipotte Wink ) mais à chaque condition tu fait:
Code PYTHON :

mdpFinal = mdpFinal + mdpAjout
 


Tu peux le faire qu'une seule fois a la fin. Après ton 'else' et ca t'évites de le l'écrire 3 fois. Smile
Code PYTHON :

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
import random
import string

def genPassword():
    lettre = list(string.ascii_lowercase)
    LETTRE = list(string.ascii_uppercase)
    chiffre = list(string.digits)
    mdpFinal = ""
    while(len(mdpFinal) < 9):
        hasard = random.randint(1, 3)
        if(hasard == 1):
            mdpAjout = random.choice(lettre)
        elif(hasard == 2):
            mdpAjout = random.choice(LETTRE)
        else:
            mdpAjout = random.choice(chiffre)
        mdpFinal = mdpFinal + mdpAjout
    print(mdpFinal)
genPassword()
 


De plus tu a oublié le '!' dans ton shébang. Smile

Sinon nice fonction et merci du partage. Smile

Junky,
Ah ouais Big Grin enfaite je flippais juste que le programme me renvoyait seulement le dernier resultat

(13-11-2014, 11h05)notfound a écrit : Tant qu'à chipoter, autant le faire jusqu'au bout :

Code PYTHON :

mdpFinal += mdpAjout
 


Thx pour le partage
Faut que je perde cette mauvaise attitude Wink
edit: habitude*


RE: Générer un password - notfound - 15-11-2014

Ma touche personnelle :
Code BASH :

$ gpg --gen-random 0 9|base64
 


Et si vous êtes parano, vous pouvez utiliser le lvl 2 qui se base sur /dev/random :
Code BASH :

open("/dev/random", O_RDONLY)
 


My 2 cents


RE: Générer un password - sakiir - 26-11-2014

moi je dis : ssh-keygen Big Grin


RE: Générer un password - Junky - 26-11-2014

(26-11-2014, 13h25)sakiir a écrit : moi je dis : ssh-keygen Big Grin

?


RE: Générer un password - notfound - 26-11-2014

(26-11-2014, 13h25)sakiir a écrit : moi je dis : ssh-keygen Big Grin

Tu veux dire utiliser une clé à la place de générer un password ?


RE: Générer un password - sakiir - 28-11-2014

ben tu fais un mote de passe en fonction des la clé généré quoi


RE: Générer un password - Sh4dows - 27-12-2014

C'est super tout ça, mais il ne faut pas oublier qu'outre la complexité, un bon mot de passe c'est aussi sa durée de vie limité.

Bonnes fêtes au passage Smile


RE: Générer un password - GreenBlood - 29-12-2014

(14-11-2014, 20h37)eax64 a écrit :
Code BASH :

 p="";for i in {1..10}; do for j in $(seq $(($RANDOM%30+10))); do t=$(head -c $RANDOM /dev/urandom | md5sum | cut -d' ' -f1); echo -n $t; sleep 0.01; echo -en "\r$p"; done; p=$p$(head -c1 <<<$t); done;echo -e "$(tr 'a-z0-9' ' ' <<< $t)"
 


Outre la beauté du code, j'aime beaucoup comment ça se génère, la progression tout ça Big Grin


RE: Générer un password - sakiir - 29-12-2014

BTW , un ptit code pour la sécurité d'un mot de passe , c'est un peu bidon mais bon ..

Code PYTHON :

import re
 
def isok(password):
    nbr = 0
    maj = 0
    min = 0
    if(re.match("[a-zA-Z0-9]+", password)):
        for char in data:
            if(ord(char) > 64 and ord(char) < 91):  #Maj Checking
                maj = maj + 1
            if(ord(char) > 96 and ord(char) < 123): #Min Checking
                min = min + 1
            if(ord(char) > 47 and ord(char) < 58):  #Nbr Checking
                nbr = nbr + 1
        if(len(password) >= 10 and nbr >= 1 and min >= 1 and maj >= 1):
            return 1
        else:
            return 0
 



RE: Générer un password - gruik - 29-12-2014

hum.. si ton mdp ne match pas la regex, la fonction isok() est censée retourner... quoi ?
et data c'est défini où ?

c'est carrément bidon même je dirais, tu l'as testé ton code avant de le poster ? Big Grin

toujours dans le même esprit, on pourra discuter du bienfondé des règles mais au moins le code est valide et un peu plus propre:
Code PYTHON :
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import string

MOT_DE_PASSE_OK, PAS_SUFFISAMENT_MIXTE, MOT_DE_PASSE_TROP_COURT, CARACTERES_NON_PREVUS = (1,0,0,0) # restrictif
#MOT_DE_PASSE_OK, PAS_SUFFISAMENT_MIXTE, MOT_DE_PASSE_TROP_COURT, CARACTERES_NON_PREVUS = (1,0,0,1) # permissif

def isok(password):
    nb_chiffres = 0
    nb_minuscules = 0
    nb_majuscules = 0
    nb_autres = 0

    for i in password:
        if i in string.ascii_lowercase:
            nb_minuscules += 1
        elif i in string.ascii_uppercase:
            nb_majuscules += 1
        elif i in string.digits:
            nb_chiffres += 1
        else:
            nb_autres += 1

    if len(password) < 10: # au moins 10 caracteres de long
        return MOT_DE_PASSE_TROP_COURT
    if nb_minuscules < 3 or nb_majuscules < 3 or nb_chiffres < 2:  # au moins 3 minuscules, 3 majuscules et 2 chiffres
        return PAS_SUFFISAMENT_MIXTE
    if nb_autres > 0:  # on fait quoi ? on valide ou pas ? (cf restrictif/permissif plus haut)
        return CARACTERES_NON_PREVUS
    return MOT_DE_PASSE_OK

if __name__ == '__main__':
    print 'le mot de passe choisi est %s' % (isok(raw_input('entrez un mot de passe: ')) and 'OK' or 'PAS BON')
    print '''
rappel, un bon mot de passe (selon mes criteres tout pourris) doit :
    - faire plus de 10 caracteres
    - comporter au minimum 3 majuscules
    - comporter au minimum 3 minuscules
    - comporter au minimum 2 chiffres'''

    if not CARACTERES_NON_PREVUS:
        print '''    - ne pas comporter d'autre caractere que majuscules, minuscules ou chiffres'''
 


et le résultat, avec en entrée un mot de passe très sûr :
Code :
entrez un mot de passe: ILoveYou123
le mot de passe choisi est OK



RE: Générer un password - sakiir - 01-01-2015

oui c'est archi bidon je sais , c'est l’interpréteur python de checkio.org qui me l'a validé.


RE: Générer un password - ZanyMonk - 25-02-2015

Bon c'est pas grand chose mais j'ai vu le titre du topic ça m'a donné envie de faire le mien, alors voilà. C'pas grand chose mais je crache jamais sur un peu de pratique en Python
Code PYTHON :

#!/usr/bin/env python2
import re, sys, string, random, argparse

parser = argparse.ArgumentParser(
    description='Generates a password'
)
parser.add_argument(
    '-l', '--length',
    type=int, default=8,
    help='Select password length (default: 8)'
)
parser.add_argument(
    '--lvl',
    type=int, default=3,
    help='Select password level between 1 & 5 (default: 3)'
)
args = parser.parse_args()

charsets = [
    string.ascii_lowercase,
    string.ascii_uppercase,
    string.digits,
    '+=!?-',
    ',;/:*$'
]

def generatePassword(length, level):
    charset = []
    for i in range(level):
        charset += list(charsets[i])
   
    password = ''
    while 1:
        for c in range(length):
            password += str(random.choice(charset))
        if(checkPassword(password, level)):
            break
        password = ''

    return password

def checkPassword(password, level):
    for i in range(level):
        if(not re.search(r"[" + re.escape(charsets[i]) + r"]", password)):
            return False
    return True

print generatePassword(args.length, args.lvl)
 



RE: Générer un password - otherflow - 10-04-2015

Bonjour à tous,

Pour ma part, mon script de génération de mots de passe est écrit en bash. Il se base sur les outils tr pour la gestion des différents charsets, et sur head pour la gestion de la taille du mot de passe. L'entropie, quant à elle, est obtenu grâce à l'utilisation du pseudo device /dev/urandom. Ce script est doté d'une petite interface homme machine en ligne de commande permettant de paramétrer la taille et le charset souhaité.

La description des options :
Code :
$ genpasswd

Usage : /usr/local/bin/genpasswd <options>

Options :
    --taille    [taille]
    --type      [type]    

Types disponibles :

alnum    lettres et chiffres
alpha    lettres
digit    chiffres
graph    caracteres imprimables, sans inclure les blancs
lower    lettres minuscules
print    caracteres imprimables, incluant les blancs
punct    caracteres de ponctuation
upper    lettres majuscules
xdigit   chiffres hexadecimaux

Le code :
Code :
#!/bin/bash

TYPES[0]="alnum"
TYPES[1]="alpha"
TYPES[3]="digit"
TYPES[4]="graph"
TYPES[5]="lower"
TYPES[6]="print"
TYPES[7]="punct"
TYPES[8]="upper"
TYPES[9]="xdigit"

OK=2

function usage() {
    echo -e "\nUsage : $0 <options>"
    echo -e "\nOptions :\n\t--taille\t[taille]\n\t--type\t\t[type]\t\n\nTypes disponibles :\n"
    echo -e "alnum\tlettres et chiffres"
    echo -e "alpha\tlettres"
    echo -e "digit\tchiffres"
    echo -e "graph\tcaracteres imprimables, sans inclure les blancs"
    echo -e "lower\tlettres minuscules"
    echo -e "print\tcaracteres imprimables, incluant les blancs"
    echo -e "punct\tcaracteres de ponctuation"
    echo -e "upper\tlettres majuscules"
    echo -e "xdigit\tchiffres hexadecimaux\n"
}

if [ $# -lt 1 ]
then
    usage
    exit
fi

# Traitement des arguments du script
ARG=("$@")

for N in `eval echo {0..$(($#-1))}`
do
    if [ -n "${ARG[$N]}" ]
    then
        if [ "${ARG[$N]}" == "--type" ] && [ -n "${ARG[$(($N+1))]}" ]
        then
            TYPE=${ARG[$(($N+1))]}
            N=$(($N+1))
        elif [ "${ARG[$N]}" == "--taille" ] && [ -n "${ARG[$(($N+1))]}" ]
        then
            LENGTH=${ARG[$(($N+1))]}
            N=$(($N+1))
        fi
    else
        usage
        exit
    fi
done

# Vérification de la validité du type passée en paramètre
for T in ${TYPES[*]}
do
    if [ "$TYPE" ==  "$T" ]
    then
        OK=$(($OK-1))
        break
    fi
done

# Vérification de la validité de la taille passée en paramètre
if [[ $LENGTH =~ ^-?[0-9]+$ ]]
then
    OK=$(($OK-1))
fi

# Génération du mot de passe
if [ $OK -eq 0 ]
then
    echo $(tr -cd "[:$TYPE:]" < /dev/urandom | head -c $LENGTH)
else
    usage
fi

Un exemple d'utilisation générant un mot de passe de 15 caractères alphanumérique :
Code :
$ genpasswd --taille 15 --type alnum
IFCMXcn30QDRNHC

otherflow


RE: Générer un password - pepperspray77 - 29-08-2023

Ma devise favorite avec Python, plus c’est court.. mieux c’est Big Grin


Code :
import string, random
carac = string.ascii_letters + string.digits
mdp = "".join(random.choice(carac) for _ in range(9))
print(mdp)