Нет, не в общем случае: хеш-функция не является функцией шифрования и не предназначена для обратимости.
Обычно невозможно наверняка восстановить исходный хеш. Это связано с тем, что размер домена хеш-функции превышает диапазон функции. Для SHA-1 домен не ограничен, но диапазон составляет 160 бит.
Это означает, что по принципу Pigeonhole , несколько значений в домене сопоставляются с тем же значением в диапазоне. Когда такие два значения отображаются на один и тот же хеш, это называется коллизия хешей .
Однако, для определенного ограниченного набора входов (где область входов намного меньше , чем диапазон хеш-функции), тогда, если обнаружено столкновение хеша Например, с помощью поиска методом грубой силы , может быть «приемлемым», предполагая, что входная информация, вызывающая хэш, была исходным значением. Вышеописанный процесс фактически является прообразом атаки . Обратите внимание, что этот подход очень быстро становится невозможным, , как показано внизу. (Есть, вероятно, несколько хороших математических формул, которые могут определить «приемлемые» с точки зрения вероятности коллизии для данного размера домена, но я не настолько подкован.)
Единственный способ узнать, что это был вход only , который сопоставлен с хэшем, однако, это выполнить исчерпывающий поиск по всем значениям в диапазоне - такие как все строки с заданной длиной - и убедитесь, что это был единственный такой ввод, который привел к данному хэш-значению.
Обратите внимание, однако, что ни в коем случае процесс хеширования не является "обращенным". Даже без действующего принципа голубиных дырок, SHA-1 и другие криптографические хеш-функции специально предназначены для невозможности обратного , то есть они "односторонние" хеш-функции. Есть несколько продвинутых техник, которые можно использовать для уменьшения диапазона различных хэшей; их лучше оставить докторам наук или людям, специализирующимся на криптографическом анализе: -)
Удачного кодирования.
Для развлечения попробуйте создать прообраз грубой силы на строке из 3 символов. Предполагая, что допустимы только английские буквы (A-Z, a-z) и цифры (0-9), в этом случае есть комбинации «только» 62 3 (238,328). Затем примерьте строку из 4 символов (62 4 = 14 776 336 комбинаций) ... 5 символов (62 5 = 916 132 832 комбинаций) ... 6 символов (62 6 = 56 800 235 584 комбинации) ...
Обратите внимание, насколько больше домен для каждого дополнительного символа: этот подход быстро становится непрактичным (или «неосуществимым»), и хэш-функция выигрывает: -)
Одним из способов взлома паролей для ускорения атак прообразом является использование радужных таблиц (которые могут охватывать только небольшой набор всех значений в домене, на который они рассчитаны), который именно поэтому пароли, использующие хеширование (SHA-1 или иное), всегда должны иметь большое случайное число .