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()
PHP中文网2017-04-17 17:36:06
基本的には衝突の確率は非常に低いと考えてよく、ここで指定した長さは20ビットです。全く衝突しないとは言えませんが、確率は非常に低く、基本的には衝突することになります。衝突はありません。
ドキュメントを参照
「返されるデータは、暗号化アプリケーションにとって十分に予測不可能である必要がありますが、その正確な品質は OS の実装によって異なります。
」返されたデータは、暗号関連の暗号化に役立つほど十分に「予測不可能」です。
テストを行ったところ、1000W のレコードが生成されました。データのテスト強度を上げて再試行できます。統計的な観点から見ると、この非常に確率の低いイベントの確率は 0 であると考えられます。
リーリー