Является ли это допустимым способом генерации n
случайных байтов, которые являются криптографически случайными?
def cryptographically_secure_random_bytes(n):
return ''.join(chr(random.SystemRandom().randint(0,256)) for _ in range(n))
Я знаю, random.SystemRandom()
совпадает с os.urandom()
, и я знаю, что os.urandom()
безусловно, криптографически безопасный способ генерации случайных чисел.
Тем не менее, часть chr(random.SystemRandom().randint(0,256))
немного сбивает меня с толку.Поскольку chr()
не поддерживает юникод, я предполагаю, что эта функция отбрасывает некоторые символы, которые в противном случае были бы созданы random.SystemRandom()
.
Я не уверен, что и думать о randint(0,256)
, так как это размер байта.