Есть ли библиотека, которая выдаст строку, которая хэширует (SHA1) для данного ввода? - PullRequest
2 голосов
/ 23 марта 2012

Мне интересно, возможно ли найти блок текста, который бы хэшировал до известного значения.В частности, я ищу функцию CreateDataFromHash (), которая может быть вызвана следующим образом:

unsigned char myHash[] = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
unsigned int length = 10000;
CreateDataFromHash(myHash, length);

Здесь CreateDataFromHash вернет строку длины 10000, содержащую произвольные данные, которая хэширует на myHash с использованием SHA1.

Спасибо.

Ответы [ 5 ]

5 голосов
/ 23 марта 2012

В общем, не существует простого и даже умеренно сложного способа сделать это.

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

Например, этот метод суммирования MD5 будет обнаруживать коллизии (но не входные данные для данного выхода) примерно за 8 часов на компьютере с частотой 1,6 ГГц.

В частности, для SHA-1 вас может заинтересовать , прочитав это .

2 голосов
/ 23 марта 2012

Одной из целей SHA1 является то, что это должно быть очень трудно сделать.

1 голос
/ 23 марта 2012

Это будет «атака прообраза». О SHA-1 публично не известно о такой вещи.

Единственная известная атака против SHA-1 - это столкновительная атака. Это означает, что я нахожу два входа, которые дают одинаковый результат, но ни один из них не предопределен, так сказать. Несмотря на это, для большинства людей эта атака неосуществима - исходя из объема вычислений, самое близкое, на что я могу рассчитывать, это то, что вам придется потратить где-то в диапазоне нескольких миллионов долларов, чтобы построить машину, которая даст вам около одной пары ключей в неделю (при условии, что она работает, ничего не делая 24/7).

1 голос
/ 23 марта 2012

хеширование является односторонней функцией. вы не можете получить ввод с выхода.

0 голосов
/ 23 марта 2012

Вы должны грубой силой это.См.

Генератор паролей перебором PHP

Получить строку, сделать хэш, сравнить, повторить

...