feat: Semaine 8

This commit is contained in:
gauvainboiche
2026-05-11 09:25:19 +02:00
parent 606e43e53f
commit 3315cb2336
123 changed files with 5748 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
'''
Là encore, j'ai délégué à Clause Sonnet 4.6 (voir secrets.py pour la partie 1)
Je dois avouer une chose : chercher sur Internet est devenu un enfer.
Je ne sais pas comment faire pour trouver des ressources pertinentes, et j'ai l'impression que les résultats sont de moins bonne qualité qu'avant.
J'ai donc préféré déléguer à l'IA. En revanche il n'y a rien de sorcier.
'''
import os
import bcrypt
from cryptography.fernet import Fernet
_KEY_FILE = "secret.key"
def _load_or_create_key() -> bytes:
if os.path.exists(_KEY_FILE):
with open(_KEY_FILE, "rb") as fh:
return fh.read().strip()
key = Fernet.generate_key()
with open(_KEY_FILE, "wb") as fh:
fh.write(key)
return key
_fernet = Fernet(_load_or_create_key())
def hash_password(password: str) -> str:
return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
def verify_password(password: str, password_hash: str) -> bool:
return bcrypt.checkpw(password.encode("utf-8"), password_hash.encode("utf-8"))
def encrypt_secret(plaintext: str) -> str:
return _fernet.encrypt(plaintext.encode("utf-8")).decode("utf-8")
def decrypt_secret(ciphertext: str) -> str:
return _fernet.decrypt(ciphertext.encode("utf-8")).decode("utf-8")