在python中创建一个salt

paj*_*ajm 25 python salt base62

我如何在python中创建一个随机的,16个字符的base-62 salt?我需要它用于协议,我不知道从哪里开始.谢谢.

Utk*_*glu 30

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

>>> "".join(chars)
'wE9mg9pu2KSmp5lh'
Run Code Online (Sandbox Code Playgroud)

这应该工作.

  • 很好的答案,但最后4行可以用'''.join(random.choice(ALPHABET)for i in range(16))更加惯用. (17认同)
  • 另请参阅secrets.choice(3.6+)以获取加密安全版本,替换示例中的random.choice. (3认同)

yar*_*elk 24

你不应该使用UUID,它们是唯一的,而不是随机的:使用CreateUUID()函数作为盐是个好主意吗?

你的盐应该使用加密安全的随机数,在python 2.4+中,os.urandom是这些的来源(如果你有一个很好的计时源).

# for some given b62encode function

salt = b62encode(os.urandom(16))
Run Code Online (Sandbox Code Playgroud)

您还可以使用bcrypt或其他令人敬畏的加密/散列库中的生成器,这些库是众所周知的,并且由比我更专业的人审查.

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

  • pip install bcrypt应该删除错误...显示你的计算机上没有安装bcrypt软件包--- anurageldorado (3认同)

小智 7

旧问题,新的秘密解决方案

import secrets

random_string = secrets.token_hex(8)
Run Code Online (Sandbox Code Playgroud)

将产生一个16个字符的随机字符串


lor*_*zli 5

这些天mksaltcrypt模块中有一个官方方法.它不会给你一个简单的16个字符长的字符串,但$digit$无论如何都要求大多数哈希函数需要.如果您正在使用哈希密码,那么使用它可能会更安全.

import crypt
crypt.mksalt(crypt.METHOD_SHA512)
Run Code Online (Sandbox Code Playgroud)

生成如下输出:

$6$wpg9lx1sVFNFSCrP
Run Code Online (Sandbox Code Playgroud)

  • 在 python 2.7 中不存在 (2认同)