有人可以分享在Python中为OAuth请求创建随机数的最佳做法吗?

最佳答案

这是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或其抽象接口(interface)(SystemRandom)。

我喜欢lambda,并且不希望使用非字母数字字符,因此我使用了以下命令:
lambda length: filter(lambda s: s.isalpha(), b64encode(urandom(length * 2)))[:length]

10-06 01:01