Нежелательные научные обозначения в MS Access - PullRequest
0 голосов
/ 05 ноября 2018

Я сталкиваюсь с очень странной проблемой с MS Access. У меня есть некоторый код VBA, используемый в форме сброса пароля. Код хеширует входной пароль, а затем сохраняет хэш в таблице пользователей. Вот соответствующий фрагмент:

If newPW1 = newPW2 Then
    MsgBox ("Passwords Match!")
    hashPW = Encrypt(newPW1)
    MsgBox ("HashedPW is " & hashPW)
    updatePW = "UPDATE Users SET Password = " & hashPW & " WHERE Username = pwChangeUsrnm"
    DoCmd.RunSQL (updatePW)

MSGbox - мои заметки отладки. Я знаю, что хеш генерирует правильно как длинную цепочку чисел, все хорошо. Когда я захожу в таблицу данных для таблицы «Пользователи», число всегда преобразуется в научную нотацию.

Вот скриншот таблицы данных. bob.smith - это пример того, что я получаю после запуска кода, остальные два - бред, который я ввел вручную. Поле отформатировано как строка, поэтому я не уверен, почему оно даже попытается преобразовать число в SN, если, насколько я могу судить, элемент всегда является строкой.

Я думаю, что ошибка должна закрасться вокруг запроса SQL? Если есть лучший способ сделать это, тогда я весь в ушах.

Заранее спасибо за помощь!

техническое описание

datasheet

вид конструкции

design view

Полный код, на всякий случай:

Option Compare Database




Private Sub Command84_Click()

Dim hashPW As String

Dim updatePW As String


Dim checkName As String
checkName = Nz(DLookup("Username", "Users", "Username = pwChangeUsrnm"), "aaa")
MsgBox ("checkName set to " & checkName)

If pwChangeUsrnm = checkName Then

    MsgBox ("Username Found")
    If newPW1 = newPW2 Then
        MsgBox ("Passwords Match!")
        hashPW = Encrypt(newPW1)
        MsgBox ("HashedPW is " & hashPW)
        updatePW = "UPDATE Users SET Password = " & hashPW & " WHERE Username = pwChangeUsrnm"
        DoCmd.RunSQL (updatePW)

    Else

    MsgBox ("Passwords Do Not Match!")

    End If

Else

MsgBox ("Username not found")

End If

End Sub

1 Ответ

0 голосов
/ 06 ноября 2018

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

If newPW1 = newPW2 Then
    MsgBox ("Passwords Match!")
    hashPW = Encrypt(newPW1)
    MsgBox ("HashedPW is " & hashPW)
    updatePW = "UPDATE Users SET Password = '" & hashPW & "' WHERE Username = pwChangeUsrnm"
    DoCmd.RunSQL (updatePW)

А благодаря второму комментарию Зеф о безопасности, я все это учту. Для целей этой базы данных безопасность не слишком большая проблема, поскольку она будет отстаивать существующие меры безопасности. Хеширование паролей - это больше, чтобы не отображать пароли в виде простого текста. Тем не менее, полезно знать об этих дополнительных функциях.

...