什么是在Python中生成API KEY和SECRET的最简单,最安全的方法

Dha*_*oon 18 python django tastypie

我需要生成一个API密钥和Secret,它将存储在Redis服务器中.生成密钥和秘密的最佳方法是什么?

我正在开发一个基于Django-tastypie框架的应用程序.

Mob*_*uck 29

如果您使用的是Python 3.6或更高版本,则可以使用秘密模块:

秘密模块用于生成适用于管理密码,账户认证,安全令牌和相关秘密等数据的加密强随机数.

特别是,秘密应该优先于随机模块中的默认伪随机数生成器使用,该随机模块设计用于建模和模拟,而不是安全性或加密.

例如,生成一个16字节的令牌:

>>> import secrets
>>> secrets.token_urlsafe(16)
'zs9XYCbTPKvux46UJckflw'
>>> secrets.token_hex(16)
'6bef18936ac12a9096e9fe7a8fe1f777'
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这是直接从终端调用的版本:`python -c'import secrets; print(secrets.token_urlsafe(16))'` (3认同)

T. *_*tal 18

编辑:为了一种非常安全的方式生成随机数,你应该使用urandom:

from binascii import hexlify

key = hexlify(os.urandom(length))
Run Code Online (Sandbox Code Playgroud)

这将生成字节,key.decode()如果需要字符串则调用

您可以通过python方式生成所需长度的键:

import random
import string

def generate_key(length):
    return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))
Run Code Online (Sandbox Code Playgroud)

然后你可以用你想要的长度来调用它key = generate_key(40).
您可以指定要使用的字母,例如仅使用仅string.ascii_lowercase包含小写字母的键.

在tastypie中还有Model for Api身份验证,可能值得一试https://django-tastypie.readthedocs.org/en/latest/authentication.html#apikeyauthentication