Поэтому я пытаюсь найти способ получить невероятно невероятное состояние, основанное на случайных поколениях. Чтобы лучше объяснить, вот пример:
from random import *
import ctypes
random1 = [randint(0, 2 ** 32 - 1) for j in range(10000000)]
while True:
random2 = [randint(0, 2 ** 32 - 1) for i in range(10000000)]
if set(random2) == set(random1):
MessageBox = ctypes.windll.user32.MessageBoxW
MessageBox(None, 'Match', 'Output', 0)
break
Из-за ограничений и функциональности мерсена твистера и равномерности его распределения чисел, вполне вероятно, что мы сгенерируем 10 миллионов номеров в обоих списках, где когда порядок не имеет значения и дубликаты удаляются, они будут совпадать довольно часто.
Это не так уж редко, но следующий код немного лучше:
from random import *
import ctypes
while True:
if random() == 0.0:
MessageBox = ctypes.windll.user32.MessageBoxW
MessageBox(None, 'Match', 'Output', 0)
break
Это много Это случается реже, но при большой производительности в одноядерном процессоре, которая сегодня довольно распространена, вероятность того, что победа будет достигнута через 1 день, все еще велика. Вероятность составляет 1/2 ^ 56, и с учетом ограничений твистера Мерсенна, это не так уж вероятно.
Есть ли хороший способ написать условие, использующее случайность в python, которое действительно быть крайне маловероятным, чтобы это произошло? .. То есть, для взлома понадобится год или больше.
В качестве альтернативы я решил обратиться к совпадению ha sh, создавая случайный SHA256 га sh, затем генерирует случайные большие данные и хэширует их через sha256, чтобы попытаться найти соответствие ha sh. Но я не знаю, как наблюдать вероятность в этом случае.