2017-02-08 5 views
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() 

ただし、ユーザーが正しいログインの詳細を入力しても次のフォームは表示されません。どのようにこれを解決することができますか?

+3

MDF?私はあなたがMD5を意味すると思う。 SHAはパスワードをハッシングするための方法ではありません。私はあなたが 'BCrypt'を得ることを提案します、それは非常に使いやすいです。残りの部分はデバッグの問題ですが、 '@ Password'は常に' @ Password'と同じです – Plutonix

+1

ハッシュ関数を使うだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。代わりに、約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 'PBKDF2'(別名' Rfc2898DeriveBytes')、 'password_hash' /' password_verify'、 'Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。ユーザーを保護することが重要です。安全なパスワード方法を使用してください。 – zaph

+0

'cmd.ExecuteScalar()'をなぜ2回呼び出すのですか? – Enigmativity

答えて

関連する問題