Хранение хэша пароля SHA512 в базе данных

В моем веб-приложении ASP.NET я хэширую пароли пользователей с помощью SHA512.

Несмотря на много SO'ing и Googling, я не понимаю, как я должен хранить их в базе данных (SQL2005) - приведенный ниже код показывает основы того, как я создаю хэш в виде строки, и в настоящее время я вставляю его в базы данных в столбец Char(88), так как это длина, созданная последовательно

Является ли лучший способ сделать это как строку, если это так, это всегда будет 88 символов в SHA512 (поскольку я видел некоторые странные вещи в Google)?

 Dim byteInput As Byte() = Encoding.UTF8.GetBytes(sSalt & sInput)
 Dim hash As HashAlgorithm = New SHA512Managed()
 Dim sInsertToDatabase As String =  Convert.ToBase64String(hash.ComputeHash(byteInput))

person Chris    schedule 01.12.2009    source источник
comment
Взгляните на текст ссылки/, если вы хотите использовать членство asp.net. Он имеет очень открытую структуру таблиц, поэтому его может быть проще интегрировать с вашей текущей базой данных.   -  person jhexp    schedule 14.04.2010


Ответы (1)


SHA512 выводит 512 бит или 64 байта. Вы можете сохранить эти 64 байта в двоичном столбце, если хотите.

Если вы хотите обрабатывать хэш вне вашего приложения, удобнее хранить строку в формате Base64, как вы делаете сейчас. Base64 добавляет примерно 33% постоянных накладных расходов, поэтому вы можете ожидать, что строка всегда будет состоять из 88 символов.

Тем не менее, ASP.NET имеет встроенную достаточно комплексную систему аутентификации, которая вы должны использовать.

person Vinko Vrsalovic    schedule 01.12.2009
comment
Массив байтов в .NET сопоставляется непосредственно с BINARY (или VARBINARY) в T-SQL. - person RickNZ; 02.12.2009
comment
Спасибо @RickNZ - очень признателен. - person Chris; 02.12.2009
comment
Спасибо @Vinko за все разъяснения - мне нравится владеть моделью безопасности и точно понимать, что и где происходит, и знать, что я могу перенести удобство использования паролей из ASP.NET в любое время - я был укушен там раньше . Может быть, заблуждаюсь, конечно, не то, чтобы я помешан на контроле или что-то в этом роде;) - person Chris; 02.12.2009