En fait, j'avais besoin d'un mot de passe avec n'importe quel nombre de chiffres et 1000 ou plus pour travailler ... Comme c'est une bonne idée, j'ai également étudié Python et créé un générateur de mots de passe avec les spécifications suivantes.
Vous n'avez pas fait grand-chose. Changé en symboles de poids dans random.choices (population, weights = weights, k = password_length))
. (Parce que j'ai senti que le symbole Osugi dans le mot de passe!) La pondération se fait avec make_weights (population)
, donc si vous pensez qu'il est déséquilibré, veuillez changer cela.
Du point de vue «d'enseigner aux enfants», ce programme est plus difficile qu'Othello. Parce que le concept de code de caractère sort. C'est difficile à comprendre même si vous dites: "Un affiché sur l'écran que vous regardez est un nombre hexadécimal 0x41".
# Password generator
# created 2020 (C) tsFox
import random , string , re
class password_generator_class:
def __init__(self):
self.punctuation = "!""#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
#La saisie au clavier
def yndinput(self,yndstr,yndsw):
while True:
akey = input(yndstr)
if yndsw and akey.isdigit():
return akey
if yndsw == False and ( akey.lower() == 'n' or akey.lower() == 'y' ):
return akey.lower()
#Saisissez les caractères que vous souhaitez exclure et renvoyez une nouvelle population
def remove_specific_characters(self,population):
yn = pg.yndinput("Y a-t-il des caractères que vous souhaitez exclure?(y/n)=", False)
if yn == 'n':
return population
#Spécifiez les caractères exclus
while True:
specific_characters = input("Entrez tous les caractères que vous ne souhaitez pas utiliser (par exemple O`\\'l)=")
if specific_characters != "":
break
#Répertoriez une fois et effacez les symboles inutiles
list_population = list(population)
for c in specific_characters:
list_population.remove(c)
#Revenir également à la chaîne de caractères
new_population = "".join(list_population)
return new_population
#Créer un poids
def make_weights(self,current_population):
list_weights = list()
for c in current_population:
list_weights.append(2 if c in self.punctuation else 6)
return list_weights
#Validité du mot de passe
def check_validity(self,tmp_password,punctation_check):
for x in range(len(tmp_password)-2):
a = ord(tmp_password[x])
b = ord(tmp_password[x+1])
c = ord(tmp_password[x+2])
if ( -1 <= int(a - b) <= 1 ) and ( -1 <= int(b - c) <= 1 ):
return 1
start_punctation = re.search( "[{}]".format(self.punctuation) ,tmp_password)
if punctation_check == "y" and start_punctation == None:
return -1
return 0
if __name__ == '__main__':
#Logique principale
pg = password_generator_class()
passwords =list()
password = str()
weights = list()
specific_characters = str()
#Si non spécifié, seuls les nombres
population = string.digits
generate_count = int(pg.yndinput("Nombre de mots de passe à générer(Valeur numérique)=",True))
password_length = int(pg.yndinput("Nombre de chiffres dans le mot de passe(Valeur numérique)=",True))
if pg.yndinput("Incluez-vous l'anglais en minuscules?(y/n)=", False) == 'y':
population = population + string.ascii_lowercase
if pg.yndinput("Incluez-vous la capitale anglaise?(y/n)=", False) == 'y':
population = population + string.ascii_uppercase
#S'il faut mettre un symbole
punctation_yn = pg.yndinput("Incluez-vous le symbole?(y/n)=", False)
if punctation_yn == "y":
population = population + string.punctuation
#Supprimez tous les caractères exclus et placez-les dans une nouvelle population
population = pg.remove_specific_characters(population)
#Réduire le poids du symbole
weights = pg.make_weights(population)
#Boucle pour le nombre de générations
for n in range(generate_count):
#Boucle jusqu'à ce qu'un mot de passe utilisable soit créé
while True:
password = "".join(random.choices(population,weights=weights,k=password_length))
if pg.check_validity(password,punctation_yn):
continue
#revérifier
if password not in passwords:
break
#Ajouter un mot de passe
passwords.append(password)
#Affichage à l'écran
print(*passwords , sep = "\n" )
C'est pourquoi nous avons publié la source du générateur de mots de passe. Revoyons-nous! !!
c u
Recommended Posts