Browse Source

Password hasher with options in French language

pull/1463/head
valorisa 6 months ago
committed by GitHub
parent
commit
dbe033778e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 147
      password_hasher_FR.py

147
password_hasher_FR.py

@ -0,0 +1,147 @@
import bcrypt
import os
import json
def generate_salt(cost_factor: int = 12) -> str:
"""
Génère un sel aléatoire avec un facteur de coût spécifié.
:param cost_factor: Le facteur de coût pour bcrypt (par défaut 12).
:return: Un sel aléatoire sous forme de chaîne hexadécimale.
"""
return bcrypt.gensalt(cost_factor).decode('utf-8')
def hash_password(password: str, salt: str) -> str:
"""
Convertit un mot de passe en hachage bcrypt avec un sel.
:param password: Le mot de passe à hacher.
:param salt: Le sel à utiliser pour le hachage.
:return: Le hachage bcrypt du mot de passe avec le sel.
"""
return bcrypt.hashpw(password.encode(), salt.encode()).decode('utf-8')
def verify_password(hashed_password: str, password: str) -> bool:
"""
Vérifie si le mot de passe correspond au hachage avec le sel.
:param hashed_password: Le hachage bcrypt du mot de passe avec le sel.
:param password: Le mot de passe à vérifier.
:return: True si le mot de passe correspond au hachage, False sinon.
"""
return bcrypt.checkpw(password.encode(), hashed_password.encode())
def save_to_file(salt: str, hashed_password: str, filename: str):
"""
Sauvegarde le sel et le hachage dans un fichier.
:param salt: Le sel utilisé pour le hachage.
:param hashed_password: Le hachage du mot de passe.
:param filename: Le nom du fichier sauvegarder les données.
"""
data = {
'salt': salt,
'hashed_password': hashed_password
}
with open(filename, 'w') as file:
json.dump(data, file)
def load_from_file(filename: str):
"""
Charge le sel et le hachage depuis un fichier.
:param filename: Le nom du fichier charger les données.
:return: Le sel et le hachage du mot de passe.
"""
with open(filename, 'r') as file:
data = json.load(file)
return data['salt'], data['hashed_password']
def get_cost_factor():
"""
Demande à l'utilisateur d'entrer un facteur de coût valide.
:return: Le facteur de coût entré par l'utilisateur.
"""
while True:
cost_factor_input = input("Entrez le facteur de coût (par défaut 12, typiquement entre 4 et 31) : ")
if cost_factor_input == '':
return 12 # Utiliser la valeur par défaut si l'utilisateur n'entre rien
try:
cost_factor = int(cost_factor_input)
if 4 <= cost_factor <= 31:
return cost_factor
else:
print("Le facteur de coût doit être entre 4 et 31. Veuillez réessayer.")
except ValueError:
print("Veuillez entrer un nombre valide.")
def main():
while True:
print("\nOptions:")
print("1. Saisir un mot de passe et générer un hachage.")
print("2. Vérifier la correspondance entre un hachage et un mot de passe.")
print("3. Sauvegarder le sel et le hachage dans un fichier.")
print("4. Charger le sel et le hachage depuis un fichier.")
print("5. Saisir plusieurs mots de passe et générer des hachages.")
print("6. Quitter.")
choice = input("Choisissez une option (1/2/3/4/5/6): ")
if choice == '1':
mot_de_passe = input("Entrez le mot de passe : ")
cost_factor = get_cost_factor()
sel = generate_salt(cost_factor)
hash_mot_de_passe = hash_password(mot_de_passe, sel)
print(f"Sel : {sel}")
print(f"Hachage du mot de passe : {hash_mot_de_passe}")
elif choice == '2':
try:
hash_mot_de_passe = input("Entrez le hachage du mot de passe : ")
mot_de_passe_a_verifier = input("Entrez le mot de passe à vérifier : ")
correspondance = verify_password(hash_mot_de_passe, mot_de_passe_a_verifier)
print(f"Le mot de passe correspond-il au hachage ? {correspondance}")
except Exception as e:
print(f"Erreur lors de la vérification du mot de passe : {e}")
elif choice == '3':
try:
sel = input("Entrez le sel : ")
hash_mot_de_passe = input("Entrez le hachage du mot de passe : ")
filename = input("Entrez le nom du fichier pour sauvegarder les données : ")
save_to_file(sel, hash_mot_de_passe, filename)
print(f"Données sauvegardées dans {filename}")
except Exception as e:
print(f"Erreur lors de la sauvegarde des données : {e}")
elif choice == '4':
try:
filename = input("Entrez le nom du fichier pour charger les données : ")
sel, hash_mot_de_passe = load_from_file(filename)
print(f"Sel : {sel}")
print(f"Hachage du mot de passe : {hash_mot_de_passe}")
except Exception as e:
print(f"Erreur lors du chargement des données : {e}")
elif choice == '5':
cost_factor = get_cost_factor()
while True:
mot_de_passe = input("Entrez le mot de passe (ou tapez 'quit' pour arrêter) : ")
if mot_de_passe.lower() == 'quit':
break
sel = generate_salt(cost_factor)
hash_mot_de_passe = hash_password(mot_de_passe, sel)
print(f"Sel : {sel}")
print(f"Hachage du mot de passe : {hash_mot_de_passe}")
elif choice == '6':
print("Au revoir !")
break
else:
print("Option invalide. Veuillez choisir une option valide.")
if __name__ == "__main__":
main()
Loading…
Cancel
Save