35

Pythonでランダムな16文字のbase-62ソルトを作成するにはどうすればよいですか? プロトコルに必要ですが、どこから始めればよいかわかりません。ありがとう。

4

7 に答える 7

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

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

これはうまくいくはずです。

于 2011-03-14T01:57:17.467 に答える
33

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.
于 2012-05-04T09:11:51.040 に答える
0
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))
于 2016-10-19T14:14:13.357 に答える
0

base64 で:

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

これは12文字になります

于 2014-02-18T11:28:15.330 に答える
-1

私はちょっと好きです:

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

それは非常にランダムです。

于 2011-03-14T02:14:21.243 に答える