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()
En gros, vous pouvez penser que la probabilité de conflit est très faible, et la longueur spécifiée ici est de 20 bits. On ne peut pas dire qu'il n'y a pas de conflit du tout, mais la probabilité est très faible, et fondamentalement il y en aura. pas de conflit.
Voir la documentation
Il indique que les données renvoyées devraient être suffisamment imprévisibles pour les applications cryptographiques, bien que leur qualité exacte dépend de l'implémentation du système d'exploitation.
Les données renvoyées sont suffisamment « imprévisibles » pour être utiles au chiffrement lié à la cryptographie.
J'ai fait un test et généré des enregistrements de 1 000 W. Il n'y a pas de doublons. Vous pouvez augmenter l'intensité du test des données et réessayer. D'un point de vue statistique, la probabilité de cet événement de très faible probabilité peut être considérée comme étant de 0.
Bien sûr, il se répétera puisqu'il s'agit d'un nombre aléatoire, il se répétera de manière aléatoire.