Créer un sel en python

comment créer une base aléatoire de 16 caractères-62 salt en python? J'en ai besoin pour un protocole et je ne sais pas par où commencer. Grâce.

23
demandé sur pajm 2011-03-14 04:52:08

7 réponses

>>> import random
>>> ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
>>> chars=[]
>>> for i in range(16):
    chars.append(random.choice(ALPHABET))

>>> "".join(chars)
'wE9mg9pu2KSmp5lh'

ça devrait marcher.

27
répondu Utku Zihnioglu 2011-03-14 01:57:17

vous ne devriez pas utiliser UUIDs, ils sont uniques, pas au hasard: est l'utilisation D'une fonction CreateUUID() comme sel une bonne idée?

vos sels doivent utiliser des nombres aléatoires cryptographiquement sûrs, en Python 2.4+, os.urandom est la source de ceux-ci (si vous avez une bonne source de cadencement).

# for some given b62encode function

salt = b62encode(os.urandom(16))

vous pouvez également utiliser un générateur à partir de bcrypt ou autre bibliothèque impressionnante de crypto / hachage qui est bien connu et approuvé par les gens bien plus experts que moi.

import bcrypt
salt = bcrypt.gensalt()
# will be 29 chars you can then encode it however you want.
23
répondu yarbelk 2017-05-23 12:08:47

de nos jours, il y a une méthode officielle mksalt dans le module crypt . Il ne vous donne pas un simple 16 char long chaîne, mais ajoute $digit$ devant requis par la plupart des fonctions de hachage de toute façon. Si vous êtes hachage des mots de passe c'est probablement beaucoup plus sûr à utiliser.

import crypt
crypt.mksalt(crypt.METHOD_SHA512)

génère des sorties comme:

$wpg9lx1sVFNFSCrP
5
répondu lorenzli 2016-05-27 17:00:07

ancienne question, nouvelle solution avec secrets

import secrets

random_string = secrets.token_hex(8)

produira une chaîne aléatoire de 16 caractères

2
répondu Alex 2018-06-13 16:31:43

en base64:

import random, base64, struct
rand_float = random.SystemRandom().random()
salt = base64.b64encode((struct.pack('!d', rand_float)))

ce sera 12 chars

0
répondu olivecoder 2014-02-18 11:28:15
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))
0
répondu Simanas 2016-10-19 14:14:13

j'aime:

import md5, uuid
m = md5.md5()
m.update(uuid.uuid4())
print m.digest()[:16]

ce sera très, très aléatoire.

-1
répondu A. Jesse Jiryu Davis 2011-03-14 02:14:21