python salt base62

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))