python:16字节令牌生成用于身份验证

时间:2014-08-18 15:13:06

标签: python random

在python中,我需要生成16个字节(由于机器约束而特定)令牌以进行身份​​验证。最好的方法是什么:

  • os.urandom:它将完全相同的字节数作为参数返回相同数量的随机字节。如果同一台机器同时生成许多这样的随机数,这是一个不错的选择吗?
  • uuid.uuid4:str(uuid.uuid4())是否为16字节(如果没有,我们可以使用uuid生成16字节)?

1 个答案:

答案 0 :(得分:1)

uuid.uuid4()生成16个随机字节(如果可用则使用系统urandom),但在转换为可打印ASCII后,输出长度超过16个字节。您需要16个字节的随机数据,还是16个可打印字节?使用它作为令牌表明后者。在这种情况下,您将需要截断它(使用结束而不是开头,因为在开始时有一些非随机版本控制字节,并且剥离连字符,因为它们没有好处)并且意识到您有少于16个字节值得随意。

或者,自己对base64编码随机数据。使用b64比b16(十六进制)更适合16字节,uuid使用(12字节对8)

urandom implementations are OS specific。通常,urandom是非阻塞的,并且使用以可用熵为种子的PRNG。