Как создать случайную 16-значную соль base-62 в python? Мне нужно это для протокола, и я не уверен, с чего начать. Спасибо.
Создание соли в питоне
Ответ 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]
Это будет очень, очень случайным.