Зачем преобразовывать SHA1 в base64 перед сохранением?

#c# #sql-server-2008 #hash #sha1

#c# #sql-server-2008 #хэш #sha1

Вопрос:

Мне нужно хранить пароли в моей базе данных SQL. Слишком высокая безопасность на данный момент не требуется, но вместо использования хэша MD5 с начальным значением я планирую использовать SHA1 seed для хранения своих паролей.

Использование было бы просто для входа пользователя на веб-сайт. Поэтому, когда пользователь входит в систему, мой код C # объединяет соль пароль, хэширует его, а затем сравнивает с тем, что хранится в базе данных.

Мой вопрос в том, что в SQL Server я должен хранить SHA1 как есть (40 символов) или после преобразования их в Base64 (28 символов)?

Большинство примеров хэширования SHA1, которые я видел онлайн, похоже, окончательно преобразуют его в Base64, но я не уверен, почему или в чем было бы преимущество сохранения SHA1 после кодирования в Base64.

Ответ №1:

Хэш SHA-1 — это 160-битное значение; решения для хеширования будут выдавать 20 байт выходных данных, включая непечатаемые символы. Большинство реализаций преобразуют это в читаемый формат перед сохранением, либо в шестнадцатеричный (40 байт), либо в base64 (~ 28 символов).

Нет причин преобразовывать шестнадцатеричную строку в base64 перед сохранением, поэтому, если ваши строки уже в шестнадцатеричном формате, просто оставьте их такими.

Ответ №2:

Ответ Криса Хилда объясняет некоторые детали, но он не дает конкретного ответа на ваш вопрос.

Весь смысл хэширования пароля в первую очередь заключается в том, чтобы сделать его бесспорным, неузнаваемым и нечитаемым. Тогда нет причин конвертировать его обратно в base64, чтобы снова сделать его читаемым. Причина, по которой многие реализации делают это, в основном, из-за наборов символов и кодировок. При использовании простых наборов символов на основе ASCII реализации могут незначительно отличаться в зависимости от баз данных и языков программирования, что может привести к потере или модификации данных при сохранении и извлечении и, следовательно, поэтому специальный (необычный) символ в 1 наборе символов может не существовать в другом наборе символов.