2025-05-10 13:58:58 +01:00
|
|
|
import os
|
2025-07-14 11:12:13 +01:00
|
|
|
import hashlib
|
|
|
|
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
2025-05-10 13:58:58 +01:00
|
|
|
|
2025-07-14 11:12:13 +01:00
|
|
|
SECRET = "BBLBTV-DNS-PASSWORDS"
|
|
|
|
KEY = hashlib.sha256(SECRET.encode()).digest()
|
|
|
|
ALGORITHM = "aes-256-gcm"
|
|
|
|
IV_LENGTH = 16
|
|
|
|
AUTH_TAG_LENGTH = 16
|
2025-05-10 13:58:58 +01:00
|
|
|
|
|
|
|
def encrypt_password(clear_string):
|
2025-07-14 11:12:13 +01:00
|
|
|
iv = os.urandom(IV_LENGTH)
|
|
|
|
aesgcm = AESGCM(KEY)
|
|
|
|
|
|
|
|
ciphertext_and_tag = aesgcm.encrypt(iv, clear_string.encode(), None)
|
|
|
|
ciphertext = ciphertext_and_tag[:-AUTH_TAG_LENGTH]
|
|
|
|
tag = ciphertext_and_tag[-AUTH_TAG_LENGTH:]
|
|
|
|
|
|
|
|
return (iv + tag + ciphertext).hex()
|
2025-05-10 13:58:58 +01:00
|
|
|
|
|
|
|
def decrypt_password(encrypted_string):
|
2025-07-14 11:12:13 +01:00
|
|
|
data = bytes.fromhex(encrypted_string)
|
|
|
|
|
|
|
|
iv = data[:IV_LENGTH]
|
|
|
|
tag = data[IV_LENGTH:IV_LENGTH + AUTH_TAG_LENGTH]
|
|
|
|
ciphertext = data[IV_LENGTH + AUTH_TAG_LENGTH:]
|
|
|
|
|
|
|
|
aesgcm = AESGCM(KEY)
|
|
|
|
decrypted_bytes = aesgcm.decrypt(iv, ciphertext + tag, None)
|
|
|
|
return decrypted_bytes.decode()
|