feat: Semaine 8
This commit is contained in:
@@ -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")
|
||||
Reference in New Issue
Block a user