Как сгенерировать хэш-значение MD5, которое хэширует для себя?

Можно ли сгенерировать текстовый файл, содержимым которого является значение hash/md5 файла.

Как написать программу?


person Steven You    schedule 17.07.2012    source источник


Ответы (3)


Если такой файл существует, его можно сгенерировать, перепробовав все возможные хэши MD5 и проверив, равен ли ему его хеш MD5. Но поскольку все возможные хэши MD5 являются конечным набором, такое специальное значение MD5 может вообще не существовать.

Примечание: вы спросили только, возможно ли это, а не сколько времени это займет.

person sashoalm    schedule 17.07.2012
comment
Я согласен с @satuon, вот связанный пост. Я ожидал вычислить x в md5 (f (x)) == x для заданной функции f (x). Кажется, нет лучшего способа, кроме грубой силы. - person Steven You; 17.07.2012

Мне тоже было интересно, поэтому я написал следующую программу на паскале:

program hash;

uses md5;

var a, b: string;

begin

b:='d41d8cd98f00b204e9800998ecf8427e'; //md5sum of /dev/null

repeat

a:=md5Print(md5String(b));
b:=md5Print(md5String(a));

until a=b;

writeln(a);
writeln(b);

end.

Работает уже дней пять, а результата пока нет)))

person trimethoxy    schedule 01.07.2020

Обратите внимание, что если вы хотите использовать грубую силу, подход триметокси в корне ошибочен. Каждый хэш фактически указывает на другой случайный хэш, и по мере увеличения серии хэшей становится все более вероятным, что любой вновь посещенный хеш просто укажет вам на ранее посещенный хэш, образуя цикл длиной в миллионы или миллиарды хэшей.

Если мы предположим, что все хеш-пространство MD5 не является единым циклическим циклом, что крайне маловероятно, то почти все значения находятся в конкурентно коротком циклическом цикле, который оставляет подавляющее большинство хэшей MD5 непосещенными.

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

person Brian Arnold    schedule 05.03.2021