Нет .Цель SHA-1 и других функций хеширования - быть только в одном направлении.Если бы вы могли даже немного ускорить процесс декодирования хэша в исходное значение, механизм хэш-функции считался бы нарушенным , и многие люди, вероятно, отказались бы от использования этого алгоритма.
Причина, по которойфункции хеширования используются только потому, что вы можете использовать их для проверки того, что вы закодировали одно и то же значение (если вы закодировали $value1
и получили в результате некоторый хеш, а затем вы закодировали $value2
и получилив результате тот же самый хеш, вы можете быть уверены - практически 100% уверен - что $value1
равно $value2
). Они были просто разработаны, чтобы сделать чрезвычайно трудным ( практически невозможным) декодирование хэшей во входные переменные.
Однако ...
Есть попытки и возможности узнать входную переменную, но они основаны на концепции Радужных таблиц . Радужная таблица - это таблица, состоящая из пар входных переменных с сгенерированными хэшами.Они предварительно скомпилированы и имеют большой размер, но они позволяют находить входные значения для некоторых хешей.
и , поэтому соль была введена .Соль используется для дальнейшего усложнения входной переменной, что делает радужный стол менее надежным решением.Например, если вы сгенерируете хеш с MD5
для строки 'home'
, вы получите хеш 106a6c241b8797f52e1e77317b96a201
и, вероятно, сможете расшифровать его с помощью какого-либо общедоступного сервиса радужных таблиц в Интернете.Но если вы добавите немного соли (например, некоторые символы разрыва строки, некоторые непечатные символы и т. Д.), Скорее всего, вы найдете любую радужную таблицу, позволяющую вам декодировать хеш (даже хеш такого короткого и простого слова)быть крайне низким.
Существует также одна дополнительная причина для использования соли.Причина в следующем.Если вы используете соль, например.для вашего механизма аутентификации все значения присоединяются с этой солью.Для злоумышленника это означает, что он должен определить значение, которое создает некоторый заданный хэш, и это значение должно содержать соль, которую вы используете в своей системе (сама функция хеширования может создать некоторый хеш из двух разных значений), а затем извлеките исходное входное значение (то, которое вы добавили к соли, а затем хэшировали), чтобы сделать его пригодным для использования.Таким образом, проблема еще более усложняется.
Я надеюсь, что это проясняет концепцию алгоритмов хеширования и солей.