Initial commit: CloudRestoreAS v1.0.0 - Aplicación completa de restauración automática SQL Server
This commit is contained in:
59
app/utils/crypto.py
Normal file
59
app/utils/crypto.py
Normal file
@@ -0,0 +1,59 @@
|
||||
"""Utilidades de cifrado para passwords usando DPAPI en Windows."""
|
||||
|
||||
import base64
|
||||
import win32crypt
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def encrypt_password(password: str) -> str:
|
||||
"""
|
||||
Cifra una contraseña usando DPAPI de Windows.
|
||||
|
||||
Args:
|
||||
password: Contraseña en texto plano
|
||||
|
||||
Returns:
|
||||
Contraseña cifrada en base64
|
||||
"""
|
||||
if not password:
|
||||
return ""
|
||||
|
||||
try:
|
||||
encrypted_bytes = win32crypt.CryptProtectData(
|
||||
password.encode('utf-8'),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
0
|
||||
)
|
||||
return base64.b64encode(encrypted_bytes).decode('ascii')
|
||||
except Exception as e:
|
||||
raise RuntimeError(f"Error cifrando contraseña: {e}")
|
||||
|
||||
|
||||
def decrypt_password(encrypted_password: str) -> str:
|
||||
"""
|
||||
Descifra una contraseña usando DPAPI de Windows.
|
||||
|
||||
Args:
|
||||
encrypted_password: Contraseña cifrada en base64
|
||||
|
||||
Returns:
|
||||
Contraseña en texto plano
|
||||
"""
|
||||
if not encrypted_password:
|
||||
return ""
|
||||
|
||||
try:
|
||||
encrypted_bytes = base64.b64decode(encrypted_password)
|
||||
decrypted_bytes = win32crypt.CryptUnprotectData(
|
||||
encrypted_bytes,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
0
|
||||
)[1]
|
||||
return decrypted_bytes.decode('utf-8')
|
||||
except Exception as e:
|
||||
raise RuntimeError(f"Error descifrando contraseña: {e}")
|
||||
Reference in New Issue
Block a user