Я пытаюсь понять, как хранить хэш в моей базе данных Access. Теперь я сгенерировал хэш, добавив пароль пользователя к идентификатору пользователя (я знаю, что это не очень безопасно, но для моих целей достаточно). Я также сохранил хешированные значения в базе данных в виде строк Base64 (вручную, я еще не разработал модуль для автоматического выполнения этого), однако, когда я иду, чтобы получить хэш из базы данных, я получаю шестнадцатеричный код вместо строка. Я знаю, что строка хранится в базе данных, так как я сохранил ее там вручную, поэтому я не совсем уверен, что происходит.
Это код кнопки входа:
Sub prcLogin()
'Log User in
Dim ds As New DataSet
Dim blnCorrect As Boolean
'Fill DataSet with login details
prcConnectSet("SELECT * FROM Parent", "User", ds)
strUser = txtUser.Text
'Ensure username field is not blank
If strUser <> "" Then
'Search for the user
For Each Row In ds.Tables("User").Rows
Dim HashedPass As String = fncComputeHash(txtPass.Text & strUser)
Dim ContainedPass As String = Row.Item(3)
'Validate user
If strUser = Row.Item(0) Then
If HashedPass = Row.Item(3) Then
blnCorrect = True
lblLoggedAs.Text = Row.Item(1)
Exit For
End If
Else
blnCorrect = False
End If
Next
End If
А это код для хеш-калькулятора:
Function fncComputeHash(ByVal PasswordField As String) As String
Dim Hasher As New SHA256CryptoServiceProvider()
Dim encoder As New UTF8Encoding()
Return Convert.ToBase64String(Hasher.ComputeHash(encoder.GetBytes(PasswordField)))
End Function
Но когда я запускаю это вместо возврата значения типа «rlzhYoiO4+vpdJdsrFq5Sj9VBJ+FFYhIg9V5+z+jeNI=», которое я сохранил в базе данных, оно возвращает значение типа «5C6BED0D94B9BE8AFBC5C8CAC1E9D4BE03F556917C2611EC56F4E6F341EF60D9». Теперь, как мне обойти это? Я неправильно храню значения? Должен ли я хранить их в виде массива байтов? Если да, то как мне это сделать? Или я неправильно получаю значения? Или это нормально, и мне следует преобразовать значение, как только я получу его из базы данных?
Я очень новичок во всем этом шифровании и даже аутентификации, поэтому, если я делаю что-то глупое, скажите мне.
Заранее спасибо!
Изменить. Я использую тип данных "Текст" в Access.
Редактировать 2: Извините, теперь я понимаю путаницу. Я храню только хэш! Не открытый пароль. Поэтому очень важно, чтобы хэш, полученный из базы данных, был в том же формате, что и хэш из идентификатора пользователя и пароля.
Редактировать 3: ОК, спасибо, ребята, я решил эту проблему. Мне нужно было преобразовать его в шестнадцатеричную строку с помощью функции SoapHexBinary.