有人能分享一下在Python语言中为OAuth请求创建现时值的最佳实践吗?
发布于 2015-01-28 15:01:44
python-oauth2是如何做到这一点的:
def generate_nonce(length=8):
"""Generate pseudorandom number."""
return ''.join([str(random.randint(0, 9)) for i in range(length)])它们还具有:
@classmethod
def make_nonce(cls):
"""Generate pseudorandom number."""
return str(random.randint(0, 100000000))此外,还有一个标题为"make_nonce is not random enough“的问题,它提出:
def gen_nonce(length):
""" Generates a random string of bytes, base64 encoded """
if length < 1:
return ''
string=base64.b64encode(os.urandom(length),altchars=b'-_')
b64len=4*floor(length,3)
if length%3 == 1:
b64len+=2
elif length%3 == 2:
b64len+=3
return string[0:b64len].decode()还引用了CVE-2013-4347。TL;DR版本,使用os.urandom或其抽象接口(SystemRandom)。
我喜欢我的lambdas--不想要非字母数字字符--所以我用了这个:
lambda length: filter(lambda s: s.isalpha(), b64encode(urandom(length * 2)))[:length]发布于 2016-10-30 19:14:23
对于大多数实际目的,这提供了非常好的nonce:
import uuid
uuid.uuid4().hex
# 'b46290528cd949498ce4cc86ca854173'uuid4()使用os.urandom(),这是你在Python语言中能得到的最好的随机函数。
Nonce应该是只使用一次和很难预测。请注意,uuid4()比uuid1()更难预测,而后者更具全局唯一性。因此,您可以通过组合它们来获得更大的优势:
uuid.uuid4().hex + uuid.uuid1().hex
# 'a6d68f4d81ec440fb3d5ef6416079305f7a44a0c9e9011e684e2c42c0319303d'发布于 2019-01-25 07:04:00
虽然在创建这个问题时这可能还不存在,但Python3.6引入了secrets模块,该模块用于生成适合管理数据的加密强随机数,例如密码、帐户身份验证、安全令牌和相关秘密。
在这种情况下,可以很容易地生成一个随机数(这里是一个base64编码的字符串):
nonce = secrets.token_urlsafe()替代方法是获取二进制令牌的token_bytes或获取十六进制字符串的token_hex。
https://stackoverflow.com/questions/5590170
复制相似问题