J'ai fait un générateur de mot de passe pour enseigner Python3 aux enfants (bonus) * Complètement refait

Il semble que changer le mot de passe de ma carte numérique soit populaire, j'ai donc créé un générateur de mot de passe Mise à jour: 2020/05/30

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.

Spécifications du générateur de mots de passe

  1. Mot de passe avec n'importe quel nombre de chiffres
  2. Mélangez (ou choisissez) les minuscules anglaises
  3. Mélanger (ou choisir) la capitale anglaise
  4. Mélanger (ou sélectionner) des symboles
  5. Repoussez 3 caractères consécutifs (123, abc, 987, XYZ, 121, etc. ne sont pas bons!) 6.Assurez-vous que le symbole est inclus lorsqu'il y a un symbole
  6. Rendre possible d'exclure les éléments difficiles à saisir tels que les symboles, 0 et O, et les éléments susceptibles de se tromper (les caractères indiqués dans l'exemple sont les caractères que je n'aime pas comme mot de passe w)
  7. Créez le nombre spécifié de mots de passe pour les règles ci-dessus
  8. Sortie à l'écran

Un petit commentaire

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

J'ai fait un générateur de mot de passe pour enseigner Python3 aux enfants (bonus) * Complètement refait
J'ai fait Othello pour enseigner Python3 aux enfants (4)
J'ai fait Othello pour enseigner Python3 aux enfants (2)
J'ai fait Othello pour enseigner Python3 aux enfants (5)
J'ai fait Othello pour enseigner Python3 aux enfants (3)
J'ai fait Othello pour enseigner Python3 aux enfants (1)
J'ai essayé de faire d'Othello pour enseigner Python3 aux enfants (6) Final
J'ai créé un module Python pour traduire les commentaires
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai fait un texte Python
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
Je veux créer un environnement Python
J'ai fait un script pour afficher des pictogrammes
J'ai fait une carte hexadécimale avec Python
J'ai fait un générateur Hanko avec GAN
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai créé un outil de mot de passe en Python.
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)
Je veux créer une fenêtre avec Python
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Je veux faire un jeu avec Python
J'ai essayé d'expliquer à quoi sert le générateur Python aussi facilement que possible.
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un outil pour compiler nativement Hy
J'ai fait un module en langage C qui filtre les images chargées par Python
J'ai créé un outil pour obtenir de nouveaux articles
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Je veux écrire dans un fichier avec Python
Une histoire à laquelle j'étais accro après la communication SFTP avec python
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
Création du wrapper d'API Qiita Python "qiipy"
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
[Python] J'ai créé un système pour introduire "la recette que je veux vraiment" depuis le site de recettes!