【问题标题】:Which one is more secure to use? uuid, binascii.hexlify(os.urandom()) or random.SystemRandom()?哪一种使用起来更安全? uuid、binascii.hexlify(os.urandom()) 还是 random.SystemRandom()?
【发布时间】:2017-07-23 13:55:03
【问题描述】:

我想为自己注册服务的用户创建唯一的<client-key><client-secret>

所以,我一直在寻找相同的方法并想出了以下选项:

这是一个愚蠢的问题,但我想知道哪种实现使用起来更安全(有适当的解释)?为什么?与其他人相比,使用它有什么优势?

注意:

AFAIK,random.SystemRandom() 使用 os.urandom(x)。所以比较主要是uuidrandom.SystemRandom()

这是我迄今为止尝试过的:

1)

import random
temp = random.SystemRandom()
random_seq = ''.join(temp.choice(CHARACTER_SET) for x in range(x))
>>> 'wkdnP3EWxtEQWnB5XhqgNOr5RKL533vO7A40hsin'

2)

import uuid
str(uuid.uuid4())
>>> 'f26155d6-fa3d-4206-8e48-afe15f26048b'

我不确定解决方案。因此,我们将不胜感激。


附言 如果有适用于 Python 2.x 和 3.x 的解决方案,那就太好了。

【问题讨论】:

  • g/uuid 被设计为 unique 而不是 random。如果你想从 urandom 随机生成一些东西。
  • @AlexK. 这是有道理的。

标签: python python-2.7 python-3.x random sequence


【解决方案1】:

没有任何区别,所有在 Python 3 和 2 中都使用os.urandomuuid4 只是 instantiates a new UUID object by passing in 16 random bytes 给它:

def uuid4():
    """Generate a random UUID."""
    return UUID(bytes=os.urandom(16), version=4)

所以从随机性是如何产生的角度来看,这些没有区别。

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多