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

新手上路,请多包涵

我需要生成将存储在 Redis 服务器中的 API 密钥和机密。生成密钥和秘密的最佳方法是什么?

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

原文由 Dhanushka Amarakoon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

对于 python3.6+

 import secrets

generated_key = secrets.token_urlsafe(length)

对于 旧版本的 python

对于生成随机数的一种非常安全的方法,您应该使用 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

原文由 T. Opletal 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

secrets 模块用于生成适用于管理数据(例如密码、帐户身份验证、安全令牌和相关秘密)的加密强随机数。

特别是,应优先使用 random 模块中的默认伪随机数生成器,后者是为建模和仿真而不是安全或密码学而设计的。

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

 >>> import secrets
>>> secrets.token_urlsafe(16)
'zs9XYCbTPKvux46UJckflw'
>>> secrets.token_hex(16)
'6bef18936ac12a9096e9fe7a8fe1f777'

原文由 Moby Duck 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题