Создание криптографически безопасных случайных чисел

По умолчанию случайный модуль Python использовать Вихрь Мерсенна PRNG для генерации случайных чисел, которые, хотя и пригодны в областях , таких как моделирование, не отвечает требованиям безопасности в более сложных условиях.

Для создания криптографически защищенного псевдослучайного числа, можно использовать SystemRandom , которые, используя os.urandom , может выступать в качестве криптографической защиты генератора псевдослучайных чисел, CPRNG .

Самый простой способ использовать это просто включает в себя инициализацию SystemRandom класса. Предоставленные методы аналогичны тем, которые экспортируются случайным модулем.

 from random import SystemRandom
secure_rand_gen = SystemRandom()

 

Для того чтобы создать случайную последовательность 10 int s в диапазоне [0, 20] , можно просто вызвать 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 непосредственно для получения криптографически безопасных случайных байт.