import os from zxcvbn import zxcvbn from zxcvbn.matching import add_frequency_lists def tr(text): # TODO translation return text def add_dictionnaries(): dicts = {} directory = os.path.dirname(os.path.realpath(__file__))+'/../data' for fn in os.listdir(directory): fn = directory+"/"+fn if os.path.isfile(fn): print(fn) name = os.path.basename(os.path.splitext(fn)[0]) print(name) with open(fn) as f: dicts[name] = f.read().splitlines() add_frequency_lists(dicts) def test_pass(password, inputs): # Read input add_dictionnaries() results = zxcvbn(password, inputs) lines = [] lines.append("Résultats du test:\n") lines.append("Nombre de tentatives : {}".format(results["guesses"])) times = results["crack_times_display"] lines.append("Temps requis pour craquer votre mot de passe") lines.append("\t Dump bases de donnée mal protégée : \t**{}**".format( tr(times["offline_fast_hashing_1e10_per_second"]))) lines.append("\t Dump bases de donnée, bien protégée : \t**{}**".format( tr(times["offline_slow_hashing_1e4_per_second"]))) lines.append("\t En ligne, sans protection anti bruteforce : \t**{}**".format( tr(times["online_no_throttling_10_per_second"]))) lines.append("\t En ligne, avec protection anti bruteforce : \t**{}**".format( tr(times["online_throttling_100_per_hour"]))) lines.append("\n") lines.append("Methode de hack utilisées") if results["sequence"] == []: lines.append("\tVotre mot de passe n'a été trouvé dans aucun dictionnaire") else: for seq in results["sequence"]: if seq["pattern"] == "bruteforce": lines.append("\tMot de passe trouvé par force brute") elif seq["pattern"] == "repeat": for match in seq["base_matches"]: print("\tMot de passe trouvé par repetition depuis le dictionnaire {}". format(tr(match["dictionary_name"]))) elif seq["pattern"] == "date": lines.append("\tMot de passe trouvé par dates") elif seq["pattern"] == "sequence": lines.append("\tMot proche trouvé dans la séquence : '{}'".format(tr(seq["sequence_name"]))) else: lines.append("\tMot proche trouvé dans le dictionnaire : '{}'".format(tr(seq["dictionary_name"]))) lines.append("\n") valeur = ["Tres faible", "Faible", "Acceptable", "Correct", "Bon"] lines.append("Score Global {}/4 : {}".format(results["score"], valeur[results["score"]])) for key, values in results["feedback"].items(): lines.append("{} :".format(tr(key))) if not isinstance(values, list): values = [values] for val in values: lines.append("\t{}".format(tr(val))) return lines