Не повторяю, НЕ пытайтесь сделать ваш хэш-пароль более безопасным, выполняя "особые" действия, которые делают ваш хэш.
Прежде всего, sha1(sha1(sha1($input)))
имеет только для побочного эффекта увеличение вероятности столкновения * на каждой итерации. Увеличение вероятности столкновения - очень плохая вещь.
Вместо того, чтобы попробовать свои силы в криптологии "сделай сам", почему бы не доверять библиотекам, созданным настоящими экспертами в этой области? Используйте Portable PHP хэширование паролей .
PHPass на самом деле использует bcrypt , который является алгоритмом, разработанным для предотвращения атак с использованием радужных таблиц, словаря и перебора. Вы можете инициализировать его несколькими раундами: чем больше раундов, тем больше времени требуется для вычисления хэша. Таким образом, вы можете создавать более сильные хеши, если мощность процессора увеличивается.
* Первый вызов sha1()
принимает бесконечный ввод и создает один из 2
160
выходов. Вторая итерация принимает 2
160
входов и создает один из x
выходов, где x <= 2
160
. Третья итерация принимает x
вход и создает один из y
выходов, где y <= x <= 2
160
.
Почему каждый вызов sha1()
уменьшает количество возможных выходов? Поскольку алгоритм, стоящий за sha1()
, не был разработан для однозначного сопоставления хэшей. Теоретически вы обязательно столкнетесь, если будете хэшировать все возможные хеши.