os.urandom(20) 生成的随机数会重复吗?
这里的 urandom 应该是调用的系统的随机方法吧
在 Django REST Framework
中 Token 的生成方法
def save(self, *args, **kwargs):
if not self.key:
self.key = self.generate_key()
return super(Token, self).save(*args, **kwargs)
def generate_key(self):
return binascii.hexlify(os.urandom(20)).decode()
基本上你可以认为,冲突的概率很低了,而且这里指定的是20位的长度,不能说完全没冲突,但是这个概率非常低,基本上认为不会冲突了。
见文档
里面说 The returned data should be unpredictable enough for cryptographic applications, though its exact quality depends on the OS implementation.
返回的数据是足够的“不可预测的”,以便用于crypto相关的加密。
做了一个测试,产生了1000W条记录,没有重复的,你可以增大数据测试强度再试试。这种非常小概率的事件,从统计的角度来讲,可以认为概率为0.
当然会重复,既然是随机数,就会随机重复。