0
ユーザー名とパスワードの入力が必要なVB.NETのログインフォームがあります。ユーザー入力がSQL Server DBの正しいログイン詳細と一致する場合、別のVBフォームが表示されます。SQL Server VB.NETのログインフォームのパスワードをハッシュする
MD5を使用せずにパスワードをハッシュする必要があります。
Dim Bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(txtPassword.Text)
Dim HashofBytes() As Byte = New System.Security.Cryptography.SHA1Managed().ComputeHash(bytes)
Dim StrHash As String = Convert.ToBase64String(HashofBytes)
Using con As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""G:\Program\X\Database1.mdf"";Integrated Security=True")
con.Open()
Dim query As String = "SELECT COUNT(*) FROM Users WHERE [email protected] AND [email protected]"
Dim cmd As New SqlCommand(query, con)
cmd.Parameters.Add(New SqlParameter("@Username", txtUsername.Text))
cmd.Parameters.Add(New SqlParameter("@Password", StrHash))
Try
If cmd.ExecuteScalar() = 1 Then
frmOverview.ShowDialog()
Me.Hide()
Else
MsgBox("You have entered an invalid username or password")
End If
Catch ex As SqlException
MsgBox(ex.Message.ToString())
End Try
End Using
txtPassword.Clear()
ただし、ユーザーが正しいログインの詳細を入力しても次のフォームは表示されません。どのようにこれを解決することができますか?
MDF?私はあなたがMD5を意味すると思う。 SHAはパスワードをハッシングするための方法ではありません。私はあなたが 'BCrypt'を得ることを提案します、それは非常に使いやすいです。残りの部分はデバッグの問題ですが、 '@ Password'は常に' @ Password'と同じです – Plutonix
ハッシュ関数を使うだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。代わりに、約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 'PBKDF2'(別名' Rfc2898DeriveBytes')、 'password_hash' /' password_verify'、 'Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。ユーザーを保護することが重要です。安全なパスワード方法を使用してください。 – zaph
'cmd.ExecuteScalar()'をなぜ2回呼び出すのですか? – Enigmativity