Pythonでランダムな16文字のベース62ソルトを作成するにはどうすればよいですか?プロトコルに必要ですが、どこから始めればよいのかわかりません。ありがとう。
>>> import random
>>> ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
>>> chars=[]
>>> for i in range(16):
chars.append(random.choice(ALPHABET))
>>> "".join(chars)
'wE9mg9pu2KSmp5lh'
これはうまくいくはずです。
UUIDは使用しないでください。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.
最近では、mksalt
モジュールに公式のcrypt
メソッドがあります。単純な16文字の長さの文字列は提供されませんが、とにかくほとんどのハッシュ関数で必要とされる前に$digit$
が追加されます。パスワードをハッシュしている場合、これはおそらくはるかに安全に使用できます。
import crypt
crypt.mksalt(crypt.METHOD_SHA512)
次のような出力を生成します。
$6$wpg9lx1sVFNFSCrP
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))
base64で:
import random, base64, struct
Rand_float = random.SystemRandom().random()
salt = base64.b64encode((struct.pack('!d', Rand_float)))
これは12文字になります