Хранение соли в незашифрованном виде в базе данных рядом с хешированными паролями не является проблемой.
Цель соли не в том, чтобы быть тайной. Его цель - быть разным для каждого хэша (то есть случайным образом) и быть достаточно длинным, чтобы победить использование радужных таблиц , когда злоумышленник попадает в базу данных.
См. отличный пост на эту тему Томаса Птачека.
edit @ ZJR : даже если бы соли были полностью публичными, они все равно потеряли бы преимущество радужных таблиц. Когда у вас есть соленые и хешированные данные, лучшее, что вы можете сделать, чтобы обратить их, - это грубая сила (при условии, что хеш-функция криптографически безопасна)
edit @ n10i : См. Статью в Википедии о безопасной хэш-функции . Что касается размера соли, популярная реализация bcrypt .gensalt () использует 128 бит.