Md5 хэш + соль, как соль помогает в усложнении пароля?
Просто нужно создать новую хэш-таблицу в 20 миллиардов и всё? Ведь это делается за секунды.
1. Даже просто выделить память на 20 миллиардов хешей займет далеко не секунды.
2. Не секунды займет записать их на диск.
3. Соль нужна для того, чтобы нельзя было использовать РАНЕЕ сгенеренную хеш таблицу.
4. md5 не самый лучший хеш на сегодня - можно использовать более трудоемкое хеширование, которое будет генерироваться медленнее.

В общем соль нужна именно для того, чтобы обеспечить противодействие радужным таблицам. Все.
Предположим, у нас есть база на миллион хешированных неизвестных паролей, мы хотим перебрать миллион вариантов паролей, чтобы найти их среди хешированных.

Если хеши не солёные, то мы за миллион операций хеширования пароля найдём все подходящие пароли в нашей базе. Более того, если у нас уже есть готовые подборки хешей, то мы даже считать ничего не будем, просто поищем эти хеши.

Если хеши солёные, то нам для того же самого придётся сделать уже триллион операций хеширования пароля. Причём нам не погогут готовые таблицы хешей. Кстати, там все пароли могут быть вообще одинаковы, но мы этого даже не увидим, ведь хеши же будут разные.

Таков общий принцип. Вопрос уязвимости md5 сейчас не рассматриваем, тем более что солить можно при любом алгоритме хеширования.