建立加密安全隨機數

預設情況下,Python 隨機模組使用 Mersenne Twister PRNG 生成隨機數,雖然適用於模擬等領域,但在更苛刻的環境中無法滿足安全要求。

為了建立加密安全的偽隨機數,可以使用 SystemRandom ,通過使用 os.urandom,它能夠充當密碼安全的偽隨機數發生器 CPRNG

使用它的最簡單方法是簡單地初始化 SystemRandom 類。提供的方法類似於隨機模組匯出的方法。

from random import SystemRandom
secure_rand_gen = SystemRandom()

為了在 [0, 20] 中建立 10 ints 的隨機序列,可以簡單地呼叫 randrange()

print([secure_rand_gen.randrange(10) for i in range(10)])
# [9, 6, 9, 2, 2, 3, 8, 0, 9, 9]

要在給定範圍內建立隨機整數,可以使用 randint

print(secure_rand_gen.randint(0, 20))
# 5

因此,對於所有其他方法。介面完全相同,唯一的變化是底層數字生成器。

你也可以直接使用 os.urandom 來獲取加密安全的隨機位元組。