Actualiser débutscriptmotdepasse.ps1

This commit is contained in:
2025-12-11 14:56:08 +00:00
parent 0fba1c611c
commit a1f5049c87

View File

@@ -1,67 +1,66 @@
import pandas as pd import pandas as pd
import random import secrets # Plus sécurisé que 'random' pour les mots de passe
import string import string
def generate_password(): def generate_robust_password(length=12):
""" """
Génère un mot de passe aléatoire de 8 caractères contenant : Génère un mot de passe fort de 12 caractères.
- Au moins 1 majuscule - Utilise le module 'secrets' (cryptographiquement sûr).
- Au moins 1 minuscule - Exclut les caractères ambigus (I, l, 1, O, 0) pour éviter les erreurs de lecture.
- Au moins 1 chiffre - Garantit au moins 1 Maj, 1 Min, 1 Chiffre, 1 Spécial.
- Au moins 1 caractère spécial
""" """
# Définition des jeux de caractères # 1. Définition des caractères (sans les ambigus)
upper = string.ascii_uppercase # On retire I, l, O du jeu de lettres
lower = string.ascii_lowercase letters = string.ascii_letters.replace('I', '').replace('l', '').replace('O', '')
digits = string.digits # On retire 1 et 0 du jeu de chiffres
special = string.punctuation digits = string.digits.replace('1', '').replace('0', '')
special = "!@#$%&*+-=?" # Liste de symboles sûrs pour AD
# On s'assure d'avoir au moins un caractère de chaque type alphabet = letters + digits + special
password = [
random.choice(upper),
random.choice(lower),
random.choice(digits),
random.choice(special)
]
# On complète les 4 caractères restants avec un mélange de tous les types while True:
all_chars = upper + lower + digits + special # On pioche aléatoirement
password += [random.choice(all_chars) for _ in range(4)] password = ''.join(secrets.choice(alphabet) for _ in range(length))
# On mélange les caractères pour que l'ordre soit aléatoire # On vérifie si les conditions de complexité sont remplies
random.shuffle(password) if (any(c.islower() for c in password)
and any(c.isupper() for c in password)
# On convertit la liste en chaîne de caractères and any(c in digits for c in password)
return "".join(password) and any(c in special for c in password)):
return password
def main(): def main():
# --- CONFIGURATION ---
input_file = "Projet 01 - happy_koalas_employees.csv" input_file = "Projet 01 - happy_koalas_employees.csv"
output_file = "happy_koalas_employees_with_passwords.csv" output_file = "happy_koalas_employees_with_passwords.csv"
# ---------------------
try: try:
# Lecture du fichier CSV (séparateur point-virgule) print(f"--- Début du traitement ---")
print(f"Lecture du fichier {input_file}...") print(f"Lecture de : {input_file}")
# Lecture du CSV (gestion des séparateurs)
df = pd.read_csv(input_file, sep=";") df = pd.read_csv(input_file, sep=";")
# Nettoyage des colonnes vides éventuelles # Nettoyage des colonnes vides (fréquent avec les conversions Excel)
df = df.dropna(axis=1, how='all') df = df.dropna(axis=1, how='all')
# Génération des mots de passe pour chaque ligne print("Génération des mots de passe sécurisés...")
print("Génération des mots de passe...") # Application de la fonction
df['Password'] = df.apply(lambda x: generate_password(), axis=1) df['Password'] = df.apply(lambda x: generate_robust_password(), axis=1)
# Sauvegarde dans un nouveau fichier # Sauvegarde
df.to_csv(output_file, sep=';', index=False) df.to_csv(output_file, sep=';', index=False)
print(f"Succès ! Le fichier a été sauvegardé sous : {output_file}") print(f"✅ SUCCÈS : Fichier sauvegardé sous '{output_file}'")
# Affichage d'un aperçu # Aperçu
print("\nAperçu des 5 premiers utilisateurs :") print("\n--- Aperçu des 3 premiers comptes ---")
print(df[['FirstName', 'LastName', 'Password']].head()) print(df[['UserName', 'Password']].head(3).to_string(index=False))
except FileNotFoundError: except FileNotFoundError:
print(f"Erreur : Le fichier '{input_file}' est introuvable.") print(f"❌ ERREUR : Le fichier '{input_file}' n'a pas été trouvé dans ce dossier.")
except Exception as e: except Exception as e:
print(f"Une erreur est survenue : {e}") print(f"❌ ERREUR INATTENDUE : {e}")
if __name__ == "__main__": if __name__ == "__main__":
main() main()