BCrypt генерирует ха sh и соль, затем сравнивает с MySQL базой данных - PullRequest
0 голосов
/ 25 апреля 2020

Я ищу BCrypt для ха sh и соли и сравниваю его с ха sh, хранящимся в моей базе данных. Кажется, что с BCrypt не хватает vb. net, поэтому я и спрашиваю.

Итак, насколько я понимаю, мы генерируем ха sh и соль, когда пользователь входит их пароль. Затем мы сравниваем этот ха sh с тем, что в базе данных, однако, поскольку я ничего не нашел в Интернете для vb. net Я не уверен, как это сделать.

Это то, что у меня есть уже. Если код выглядит грязным, это потому, что я скопировал и вставил его из Visual Studio сюда, на VS он выглядит аккуратно и аккуратно.

Теперь я знаю, что будет код fl aws с кодом et c. Меня это не беспокоит, так как это для личного пользования и обучения. Просто нужно узнать, как сгенерировать salt + ha sh с помощью BCrypt, а затем сравнить его с уже введенным в мою базу данных паролем ha sh & salted, но с точки зрения того, как go узнать и повторить этот бит кода и реализовать проверка того, что соль и хэши одинаковы, я застрял.

Dim pw As String = TextBox_Password.Text
Dim Salt As String = BCrypt.Net.BCrypt.GenerateSalt(12)
Dim Hash As String = BCryot.Net.BCrypt.HashPassword(pw, salt)

Try
Connection.Open()
Dim SQLQuery
SQLQuery = "SELECT * FROM `core_members` where name='" & TextBox_Username & " ' and members_pass_hash='" & I don't know if you're meant to put Hash? here to hash the inputed password from the user? Or the TextBox_Password.Text & "'"

'As for the verify function... to compare the hashed password I do try to do this

If (BCRYpt.Net.BCrypt.Verify(pw, hash)) Then
Command1 = New MySqlCommand(SQLQuery, Connection)
READER = Command1.ExecuteReader

Dim Count As Integer
count = 0
While READER.read
count += 1
end while

READER.close()

If count = 1 then

'User Successfully Logged In

end if

'I definitely know the count = 1 etc probably not the best way to allow a user to login. I've seen something with MyData.HasRows or something like that to login?

'I know that the code above is probably no where near close to actually how it's done but as I said due to the lack of documentation with vb.net and BCrypt not making it easy. 

Любая помощь в очистке функции входа в систему будет полезной, включая сравнение хешированного пароля в моей базе данных.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Просто хочу поблагодарить @Mary за то, что он так добр и готов помочь решить мою самую большую проблему на данный момент! Спасибо!

Я только делаю этот ответ, потому что для меня было несколько опечаток, которые я должен был исправить, но все это идет к Мэри!

Итак, во-первых, я используя mysql .dat.dll, который использует Imports MySql .Data.MySqlClient (что несколько отличается от кода Мэри)

Imports Crypt = BCRypt. Net .BCrypt - Позволяет нам использовать Crypt Вместо того, чтобы вводить весь BCrypt. Net .BCrypt

Обратите внимание, что если ваши текстовые поля пусты, вы получите ошибку Object Reference, не установленную для экземпляра объекта. Это если вы на визуальной студии. Этого не произойдет, если вы запустите программу как обычный пользователь. Я скажу пользователю, чтобы убедиться, что они ввели имя пользователя и пароль

Imports Crypt = BCRypt.Net.BCrypt

Private Sub VerifyPassword()
try
  Dim Password As String = "TextBox_UserPassword"
  Dim Hashword As String = ""

Using Conn As New MySqlCommand(Connection),
    Command As New MySqlCommand("SELECT password FROM members where Username= @Username;", Conn)
    Command.Parameters.Add("@Username", MySqlDbType.VarChar).Value = TextBox_Username
    Conn.Open()
    Hashword = Command.ExecuteScalar.ToString
End Using

Dim Result = Crypt.Verify(Password, Hashword)

If result = true then
    MsgBox("Logged in")
else
    MsgBox("Logged in Failed") 
end if

Catch ex As Exception
   MessageBox.Show(ex.Message) 'Optional'
   MsgBox("Make sure have entered a Username or Password", vbcritical) 'If the textbox have nothing it will remind the user to make sure they enter a username or password'

End try

End Sub

0 голосов
/ 26 апреля 2020

Я использовал Sql Сервер для тестирования кода, потому что это было то, что мне пригодилось. Это будет работать так же для MySql. С BCrypt вам не нужно хранить соль отдельно.

Private Sub InsertNewUser()
    Dim HashWord As String = BCrypt.Net.BCrypt.HashPassword(TextBox2.Text, BCrypt.Net.BCrypt.GenerateSalt(12))
    Using cn As New SqlConnection(My.Settings.PublishCon),
            cmd As New SqlCommand("Insert Into Users (UserName, Password) Values (@Name, @HashWord);", cn)
        cmd.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = TextBox1.Text
        cmd.Parameters.Add("@HashWord", SqlDbType.VarChar, 100).Value = HashWord
        cn.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub

Private Sub VerifyPassword()
    Dim pw As String = TextBox2.Text
    Dim HashWord As String = ""
    Using cn As New SqlConnection(My.Settings.PublishCon),
            cmd As New SqlCommand("SELECT Password FROM Users where UserName= @UserName;", cn)
        cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = TextBox1.Text
        cn.Open()
        HashWord = cmd.ExecuteScalar.ToString
    End Using
    Dim result = BCrypt.Net.BCrypt.Verify(pw, HashWord)
    If result Then
        MessageBox.Show("Successful Login")
    Else
        MessageBox.Show("Sorry login failed")
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...