Cheat Sheet: Como Gerar Senhas Fortes e Seguras em Python com o Módulo
Cheat Sheet: Como Gerar Senhas Fortes e Seguras em Python com o Módulo
Este snippet demonstra como gerar senhas fortes e aleatórias utilizando a biblioteca nativa
secrets do Python. Ela é recomendada para uso criptográfico, garantindo que os caracteres gerados sejam imprevisíveis e adequados para autenticação e segurança de dados.Python
import string
import secrets
def gerar_senha(comprimento: int = 16) -> str:
"""Gera uma senha aleatória segura contendo letras, dígitos e símbolos."""
if comprimento < 8:
raise ValueError("A senha deve ter pelo menos 8 caracteres para ser segura.")
# Conjunto completo de caracteres (letras maiúsculas, minúsculas, dígitos e pontuações)
alfabeto = string.ascii_letters + string.digits + string.punctuation
# Garante a presença de pelo menos um caractere de cada categoria essencial
senha = [
secrets.choice(string.ascii_lowercase),
secrets.choice(string.ascii_uppercase),
secrets.choice(string.digits),
secrets.choice(string.punctuation),
]
# Preenche o restante do comprimento desejado com escolhas criptograficamente seguras
senha += [secrets.choice(alfabeto) for _ in range(comprimento - 4)]
# Embaralha a lista para que os caracteres fixos não fiquem sempre na mesma posição inicial
# Nota: secrets não possui 'shuffle', portanto usamos SystemRandom() para manter a segurança
secrets.SystemRandom().shuffle(senha)
return "".join(senha)
# Exemplo de uso prático
if __name__ == "__main__":
senha_gerada = gerar_senha(16)
print(f"Senha gerada: {senha_gerada}")
Pontos-chave
- Uso do módulo
secretsvsrandom: O módulosecretsutiliza fontes de entropia do sistema operacional (como/dev/urandom), tornando as senhas adequadas para uso em segurança, diferente do módulorandom, que é pseudoaleatório e previsível. - Tabela ASCII e módulo
string: As constantesstring.ascii_letters,string.digitsestring.punctuationfornecem diretamente as faixas de caracteres ASCII necessárias sem a necessidade de conversão manual de códigos numéricos comchr(). - Garantia de complexidade: O código adiciona explicitamente ao menos um caractere de cada classe (maiúscula, minúscula, número e símbolo) antes de preencher o restante da string.
- Embaralhamento seguro: O uso de
secrets.SystemRandom().shuffle()garante que a distribuição dos caracteres seja uniformemente aleatória sem fragilizar a segurança da sequência.

Comentários
Postar um comentário