# core/security.py # Importa CryptContext da biblioteca passlib para operações de hash de senha from passlib.context import CryptContext # Cria uma instância do contexto de criptografia # O esquema usado é 'bcrypt', que é seguro e amplamente aceito # O parâmetro 'deprecated="auto"' marca versões antigas como inseguras, se aplicável CRYPTO = CryptContext(schemes=['bcrypt'], deprecated='auto') class Security: # Verifica se a senha tem um hash válido @staticmethod def is_hash(senha: str) -> bool: """ Verifica se a string fornecida é um hash reconhecido pelo CryptContext. """ return CRYPTO.identify(senha) # Verifica se uma senha fornecida corresponde ao hash armazenado def verify_password(plain_password: str, hashed_password: str) -> bool: """ Compara a senha fornecida em texto puro com o hash armazenado. :param plain_password: Senha digitada pelo usuário :param hashed_password: Hash da senha armazenado no banco de dados :return: True se corresponder, False se não """ return CRYPTO.verify(plain_password, hashed_password) # Gera o hash de uma senha fornecida def hash_password(plain_password: str) -> str: """ Gera e retorna o hash da senha fornecida. :param plain_password: Senha em texto puro fornecida pelo usuário :return: Hash da senha """ return CRYPTO.hash(plain_password)