Я не вижу проблемы с использованием имени пользователя в качестве значения соли.
Более безопасный способ хранения паролей заключается в том, чтобы в любом случае использовать разные значения соли для каждой записи.
Если вы посмотрите на таблицу aspnet_Membership провайдера членства asp.net, вы увидите, что они сохранили поля пароля, пароля и имени пользователя практически в одной записи. Таким образом, с этой точки зрения нет никакой разницы в безопасности при использовании только имени пользователя для соли.
Обратите внимание, что некоторые системы используют одно значение соли для всех паролей и сохраняют его в файле конфигурации. Единственная разница в безопасности заключается в том, что если они получили доступ к единственному значению соли, то им легче будет создать радужную таблицу, чтобы взломать все пароли одновременно ...
Но опять же, если у них есть доступ к зашифрованной форме паролей, то они, вероятно, будут иметь доступ к значению соли, хранящемуся в пользовательской таблице вместе с ним ... Что может означать, что у них будет немного тяжелое время для выяснения значений пароля.
Однако, в конце концов, я считаю, что почти все приложения терпят неудачу на фронте шифрования, потому что они только шифруют то, что якобы является одной из наименее важных частей данных: паролем. То, что действительно должно быть зашифровано, - это почти все остальное.
В конце концов, если у меня есть доступ к вашей базе данных, зачем мне беспокоиться, если пароль зашифрован? У меня уже есть доступ к важным вещам ...
Очевидно, что в игре есть и другие соображения, но в конце дня я бы не стал слишком сильно переживать по этому поводу, поскольку это незначительная проблема по сравнению с другими.