2

私はまだパスワードLogin formについて何もしてhashingいません。ハッシュについてあちこちで読んでいますが、本当に混乱し、ログインフォームのコードに実装する方法が本当にわかりません。 私が見たハッシュのコード

Dim bytes() as byte  = System.Text.Encoding.UTF8.GetBytes(stringPassword);
dim  hashOfBytes() as byte = new System.Security.Cryptography.SHA1Managed().ComputeHash(bytes)
Dim strHash as string = Convert.ToBase64String(hashOfBytes)

バイトに戻す

hashOfBytes = Convert.FromBase64String(strHash)

**私のログインフォームコード**

Using conn As New MySqlConnection("Server = localhost; Username= root; Password =; Database = forms")
    Using cmd
        With cmd
            MsgBox("Connection Established")
            .Connection = conn
            .Parameters.Clear()
            .CommandText = "SELECT * FROM users WHERE BINARY Username = @iUsername AND Password = @iPassword"
            .Parameters.Add(New MySqlParameter("@iUsername", txtUser.Text))
            .Parameters.Add(New MySqlParameter("@iPassword", txtPass.Text))

        End With
        Try
            conn.Open()
            dr = cmd.ExecuteReader()
        Catch ex As MySqlException
            MsgBox(ex.Message.ToString())
        End Try
    End Using
End Using

If dr.HasRows = 0 Then

    MsgBox("Invalid user")
    Conn.Close()

Else


    Start.Show()
    Conn.Close()


End If
End Sub
4

1 に答える 1

1

パスワードのハッシュ値をテーブルの Password フィールドに保存する必要があります。
次に、入力ボックスから取得したパスワードを直接検索するのではなく、ユーザーとパスワード ハッシュを検索します。

ただし、接続の破棄後に MySqlDataReader を使用しようとするため、コードは引き続き失敗します。行のチェックを Using ブロック内に移動します

 Dim strHash as string = Convert.ToBase64String(hashOfBytes)
 .....
 Dim userIsValid as Boolean = False
 Using conn As New MySqlConnection(.........)
 Using cmd
    ....
        .Parameters.Add(New MySqlParameter("@iPassword", strHashPass))
        Try
            conn.Open()
            dr = cmd.ExecuteReader()
            userIsValid = dr.HasRows
        Catch ex As MySqlException
            MsgBox(ex.Message.ToString())
        End Try
  End Using
  End Using

  if userIsValid then
      .....
  else
      .....
  End
于 2012-11-14T09:10:54.233 に答える