Actualiser débutscriptmotdepasse.ps1
This commit is contained in:
@@ -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()
|
||||||
Reference in New Issue
Block a user