Вы можете использовать несколько хешей в вашей базе данных, это просто требует дополнительных усилий. Это того стоит, хотя, если вы думаете, что есть малейший шанс, что вам понадобится поддерживать дополнительные форматы в будущем. Я часто буду использовать записи пароля, такие как
{hashId} $ {salt} $ {хешированный пароль}
где "hashId" - это просто какое-то число, которое я использую внутренне для распознавания этого, например, я использую SHA1 с определенным шаблоном хеширования; «соль» представляет собой случайную соль в кодировке base64; и "хешированный пароль" - это хэш, закодированный в base64. Если вам нужно перенести хэши, вы можете перехватить людей со старым форматом пароля и заставить их изменить свой пароль при следующем входе в систему.
Как уже упоминали другие, вы хотите быть осторожнее с вашими хешами, так как легко сделать что-то не очень безопасное, например, H (соль, пароль) намного слабее, чем H (пароль, соль), но в то же время Вы хотите сбалансировать усилия, приложенные к этому, со стоимостью контента сайта. Я часто буду использовать H (H (пароль, соль), пароль).
Наконец, стоимость использования паролей в кодировке base64 невелика по сравнению с преимуществами возможности использования различных инструментов, которые ожидают текстовые данные. Да, они должны быть более гибкими, но готовы ли вы сказать своему боссу, что он не может использовать свой любимый сторонний инструмент, потому что вы хотите сэкономить несколько байтов на запись? : -)
Отредактировано, чтобы добавить еще один комментарий: если бы я сознательно предложил использовать алгоритм, который сжигал даже 1/10 секунды хэширования каждого пароля, мне бы посчастливилось просто посмеяться из кабинета моего босса. (Не так ли повезло? Он записал бы что-нибудь, чтобы обсудить это в моем следующем ежегодном обзоре.) Сжигание этого времени не проблема, когда у вас десятки или даже сотни пользователей. Если вы продвигаете 100 тыс. Пользователей, у вас будет одновременно несколько пользователей. Вам нужно что-то быстрое и сильное, а не медленное и сильное. "А как насчет информации о кредитной карте?" в лучшем случае нечестно, поскольку хранимая информация о кредитной карте не должна находиться рядом с вашей обычной базой данных, и в любом случае будет зашифрована приложением, а не отдельными пользователями.