Creando una sal en python
salt base62 (7)
Como que me gusta:
import md5, uuid
m = md5.md5()
m.update(uuid.uuid4())
print m.digest()[:16]
Eso será muy, muy aleatorio.
¿Cómo crearía una sal al azar de 16 caracteres de base-62 en python? Lo necesito para un protocolo y no estoy seguro de por dónde empezar. Gracias.
Estos días hay un método mksalt
oficial en el módulo crypt
. No le da una simple cadena de 16 caracteres sino que agrega $digit$
al frente requerido por la mayoría de las funciones de hashing de todos modos. Si tiene contraseñas de hash, es probablemente mucho más seguro de usar.
import crypt
crypt.mksalt(crypt.METHOD_SHA512)
Genera salidas como las siguientes:
$6$wpg9lx1sVFNFSCrP
No debe usar UUID, son únicos, no aleatorios: ¿es una buena idea usar una función CreateUUID () como sal?
Sus sales deben usar números aleatorios criptográficamente seguros, en python 2.4+, os.urandom es la fuente de estos (si tiene una buena fuente de sincronización).
# for some given b62encode function
salt = b62encode(os.urandom(16))
También puede usar un generador de bcrypt u otra impresionante biblioteca de cifrado / hashing que sea bien conocida y examinada por la gente mucho más experta que yo.
import bcrypt
salt = bcrypt.gensalt()
# will be 29 chars you can then encode it however you want.
Vieja pregunta, nueva solución con secrets
import secrets
random_string = secrets.token_hex(8)
producirá una cadena aleatoria de 16 caracteres
en base64:
import random, base64, struct
rand_float = random.SystemRandom().random()
salt = base64.b64encode((struct.pack(''!d'', rand_float)))
estos serán 12 caracteres
>>> import random
>>> ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
>>> chars=[]
>>> for i in range(16):
chars.append(random.choice(ALPHABET))
>>> "".join(chars)
''wE9mg9pu2KSmp5lh''
Esto debería funcionar.
import random
import string
def get_salt(size=16, chars=None):
if not chars:
chars = ''''.join(
[string.ascii_uppercase,
string.ascii_lowercase,
string.digits]
)
return ''''.join(random.choice(chars) for x in range(size))