Я использую пароль хеширования, используя класс .NET System.Security.Cryptography. Он имеет несколько алгоритмов для хеширования, например. MD5, SHA1, SHA256, SHA384, SHA512
Полученное хешированное значение является байтовым массивом. Должен ли я преобразовать его в шестнадцатеричную строку для хранения, или Convert.ToBase64String(), или что-то еще? (Я предпочитаю Base64, поскольку он короче Hex).
Кстати, с таким количеством хэширования, которое я выбрал, я случайно выбрал SHA384, но есть ли тот, который "лучше" или подходит для этой задачи?
Комментарии.
Обновление после прочтения первых восьми комментариев:
Следуя ответам и дальнейшему чтению, я сделал, кажется, MD5, SHA1 более или менее эквивалентны (при этом SHA1 немного более безопасен). SHA256, 384, 512 обеспечивают еще лучшую защиту в возрастающем порядке.
Так как мне не понадобится fort-knox (это для внутренней корпоративной системы без URL-адресов, браузеров, интернетов, интрасетей или экстрасети в поле зрения), я обойду бизнес "соления" - я понял, могут украсть таблицу паролей, они могут также украсть фактические данные в других таблицах.
Но я буду придерживаться концепции "соли" для дальнейшего использования; не уверен, что соль должна быть добавлена (в конце) или добавлена (спереди) пароля перед хэшированием, и будет ли это иметь значение? Кроме того, я думал о том, чтобы использовать первые несколько символов пароля как соли, чтобы избежать лишнего поля для его хранения, но я думаю, что это не достаточно долго - и соль должна быть достаточно длинной.
Консенсус говорит, что преобразование base64 является разумным выбором для хранения и сравнения. Мне остается выяснить, какая длина столбца максимальной базы данных мне понадобится для хранения хэшей, учитывая максимальную длину пароля в 15 символов. Возможно, Varchar (64)?
Спасибо всем за ваш вклад.