Для хранения пароля вам нужно больше, чем простая хеш-функция; вам нужно:
- чрезвычайно медленная хеш-функция (так что атаки методом грубой силы сложнее)
- и соль: общеизвестное значение, хранящееся вдоль хеша, индивидуальное для каждого хеш-пароля и вводимое в процесс хеширования пароля. Соль не позволяет злоумышленнику эффективно атаковать несколько паролей (например, используя предварительно вычисленные хеш-таблицы).
Так что вам нужно bcrypt .
Для точки размера выходного хеш-кода: если этот размер равен n бит, то n должен быть таким, чтобы злоумышленник не смог реально вычислить хеш-функцию 2 n раз; Для этого вполне достаточно 80 бит. Выход 128 битов, таким образом, уже избыточен. Вы по-прежнему не хотели бы использовать MD5, потому что он слишком быстрый (хотя 100000 вложенных вызовов MD5 могут быть достаточно медленными), а также потому, что в MD5 были обнаружены некоторые структурные недостатки, которые напрямую не влияют на его безопасность для хеширования паролей, но, тем не менее, плохие отношения с общественностью. В любом случае, вы должны использовать bcrypt, а не самодельную структуру.