Currently put every key in a data/keys directory. Though, this is not secure. How do I securely store them if they are needed for decryption?
KEY_DIR = "data/keys"
def load_key(user_id: str) -> bytes:
os.makedirs(KEY_DIR, exist_ok=True)
key_path = os.path.join(KEY_DIR, f"{user_id}.key")
if not os.path.exists(key_path):
key = Fernet.generate_key()
with open(key_path, "wb") as f:
f.write(key)
else:
with open(key_path, "rb") as f:
key = f.read()
return key
def get_fernet(user_id: str) -> Fernet:
return Fernet(load_key(user_id))
def encrypt_password(password: str, user_id: str) -> str:
fernet = get_fernet(user_id)
return fernet.encrypt(password.encode()).decode()
def decrypt_password(encrypted_password: str, user_id: str) -> str:
fernet = get_fernet(user_id)
return fernet.decrypt(encrypted_password.encode()).decode()