Redisサーバーに保存されるAPIキーとシークレットを生成する必要があります。キーとシークレットを生成する最良の方法は何でしょうか?
私はDjango-tastypieフレームワークベースのアプリを開発しています。
編集:乱数を生成する非常に安全な方法のために、あなたはurandomを使用する必要があります:
_from binascii import hexlify
key = hexlify(os.urandom(length))
_
これはバイトを生成します。文字列が必要な場合はkey.decode()
を呼び出します
python方法:
_import random
import string
def generate_key(length):
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))
_
そして、必要な長さkey = generate_key(40)
で呼び出すことができます。
使用するアルファベットを指定できます。たとえば、小文字のみで構成されるキーには_string.ascii_lowercase
_のみを使用します。
TastypieにはAPI認証のモデルもあります。チェックする価値があるかもしれません https://Django-tastypie.readthedocs.org/en/latest/authentication.html#apikeyauthentication
Python 3.6以降を使用している場合は、 secrets モジュールが最適です。
シークレットモジュールは、パスワード、アカウント認証、セキュリティトークン、関連するシークレットなどのデータを管理するのに適した、暗号学的に強力な乱数を生成するために使用されます。
特に、シークレットは、セキュリティや暗号化ではなく、モデリングとシミュレーション用に設計されたランダムモジュールのデフォルトの疑似乱数ジェネレータよりも優先して使用する必要があります。
例えば16バイトのトークンを生成するには:
>>> import secrets
>>> secrets.token_urlsafe(16)
'zs9XYCbTPKvux46UJckflw'
>>> secrets.token_hex(16)
'6bef18936ac12a9096e9fe7a8fe1f777'
次のモジュールを使用してランダムな文字列を生成することもできます
1 - os.urandom(64).encode('hex') #from os module
2 - uuid.uuid4() # from uuid module
3 - get_random_string(length=32) #from Django.utils.crypto
4 - secrets.token_hex(64) #from secrets >= python 3.6
T. Opletalsの回答についてコメントできないため、回答を追加しています。
Randomは暗号的に安全ではないため、random.choiceを使用しないでください。より良いオプションはrandom.SystemRandom()であり、システムのランダム性のソースを使用します。Linuxでは、これは不自然です。
def generate_key(length):
char_set = string.ascii_letters + string.punctuation
urand = random.SystemRandom()
return ''.join([urand.choice(char_set) for _ in range(length)])