В зависимости от связи между клиентом и сервером вы можете реализовать запрос-ответ, когда сервер выдает солт-значение, которое предшествует паролю, введенному пользователем перед хэшированием.
Пример:
- Пользователь создает учетную запись с именем пользователя "BobbyUser" с паролем "CleverBobby"
Операция входа
- Пользователь подключается к серверу изапрашивает соль для "BobbyUser"
- Сервер возвращает соль "QBX123"
- Пользователь отправляет
hash_function("QBX123" + "CleverBobby")
Этот подход действительно бесполезен, если вы нешифрование ваших паролей симметричным ключом вместо одностороннего хэша (который будет иметь свои собственные проблемы), таким образом, значение соли не нужно хранить и может быть сгенерировано на лету, в противном случае оно одинаково восприимчиво к атакам воспроизведения, только труднее читать.
Тем не менее, ответ l_39217_l верен, проще и, вероятно, безопаснее.