a = "qwertzuiopasdfghjklyxcvbnm"
n = "1234567890"
r = "23456qwertasdfgzxcvbQWERTASDFGZXCVOB"
l = "78901yuiophjklnmYUIPHJKLNM"
all = a + n + r + l
Perché è così complicato? Inserendo più caratteri in più volte, è più probabile che questi caratteri appaiano nelle password, il che indebolisce la password. Rendendo la tua stringa di password così complicata, rendi difficile determinare la sicurezza delle password.
Per avere una possibilità pari di qualsiasi personaggio, elencali tutti una volta sola. Inoltre, puoi semplificarlo notevolmente utilizzando il stringa modulo.
import string
all = string.ascii_letters + string.digits
Un altro problema è che la random documentazione del modulo dice che non dovrebbe essere usato per la crittografia:
Python uses the Mersenne Twister as the core generator. It produces 53-bit precision floats and has a period of 2**19937-1. The underlying implementation in C is both fast and threadsafe. The Mersenne Twister is one of the most extensively tested random number generators in existence. However, being completely deterministic, it is not suitable for all purposes, and is completely unsuitable for cryptographic purposes.
[...]
Warning: The pseudo-random generators of this module should not be used for security purposes. Use os.urandom() or SystemRandom if you require a cryptographically secure pseudo-random number generator.**
Quindi, utilizza random.SystemRandom()
invece:
import random
import string
# Consider adding string.punctuation
possible_characters = string.ascii_letters + string.digits
def generate_password(length=32):
rng = random.SystemRandom()
return "".join([rng.choice(possible_characters) for i in range(length)])
Poiché sappiamo esattamente quanti possibili personaggi ci sono (62), e sappiamo che dovrebbero essere distribuiti casualmente, possiamo dire con una sicurezza abbastanza elevata che una password generata da questo schema richiederà in media (62 ^ 32) / 2 (circa 10 ^ 57) tenta di indovinare.
Detto questo, una password di 32 caratteri è probabilmente abbastanza sicura, anche se non è casuale in modo ottimale.