Подтвердить что ты не робот

Создание соли в питоне

Как создать случайную 16-значную соль base-62 в python? Мне нужно это для протокола, и я не уверен, с чего начать. Спасибо.

4b9b3361

Ответ 1

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

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

Это должно работать.

Ответ 2

Вы не должны использовать UUID, они уникальны, а не случайны: Использует функцию CreateUUID() как соль? Хорошая идея?

Ваши соки должны использовать криптографически безопасные случайные числа, в python 2.4+, os.urandom является источником этих данных (если у вас есть хороший источник синхронизации).

# for some given b62encode function

salt = b62encode(os.urandom(16))

вы также можете использовать генератор из bcrypt или другую удивительную библиотеку крипто/хэширования, которая хорошо известна и проверена людьми более эксперт, чем я.

import bcrypt
salt = bcrypt.gensalt()
# will be 29 chars you can then encode it however you want.

Ответ 3

В настоящее время существует официальный mksalt метод в модуле crypt. Он не дает вам простую 16 char длинную строку, но добавляет $digit$ впереди, требуемую большинством функций хеширования. Если вы используете хеширующие пароли, это, вероятно, гораздо безопаснее использовать.

import crypt
crypt.mksalt(crypt.METHOD_SHA512)

Генерирует выходы следующим образом:

$6$wpg9lx1sVFNFSCrP

Ответ 4

в base64:

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

это будет 12 символов

Ответ 5

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

Ответ 6

Я вроде как:

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

Это будет очень, очень случайным.