Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何对密码进行加密和散列_Vb.net_Tsql_Security_Hash_Salt - Fatal编程技术网

Vb.net 如何对密码进行加密和散列

Vb.net 如何对密码进行加密和散列,vb.net,tsql,security,hash,salt,Vb.net,Tsql,Security,Hash,Salt,下面的代码允许用户输入用户名和密码以登录以输入学生分数。SQL data reader在进行身份验证之前验证数据库中的用户凭据。如果有人能修改密码,我将不胜感激 Dim frm As New MarksEntryFrm Dim flag As Boolean flag = False If cboForm.Text = "" Or cboAcadYear.Text = "" Or cboSubjCode.Text = "" Or txtUserName.Text = ""

下面的代码允许用户输入用户名和密码以登录以输入学生分数。SQL data reader在进行身份验证之前验证数据库中的用户凭据。如果有人能修改密码,我将不胜感激

Dim frm As New MarksEntryFrm
    Dim flag As Boolean
    flag = False
    If cboForm.Text = "" Or cboAcadYear.Text = "" Or cboSubjCode.Text = "" Or txtUserName.Text = "" Or txtPassword.Text = "" Then
        MessageBox.Show("Please any of the fields cannot be left blank", "Blank fields", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
        cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID='" & cboSubjCode.SelectedItem & "' and b.UserID='" & txtUserName.Text & "' and b.Password='" & txtPassword.Text & "' collate Latin1_General_CS_AS", cn)
        cmd.Parameters.AddWithValue("@UserID", txtUserName.Text) 'protects the database from SQL Injection
        cmd.Parameters.AddWithValue("@Password", txtPassword.Text) 'protects the database from SQL Injection

        dr1 = cmd.ExecuteReader
        ctr = ctr + 1
        If dr1.Read Then
            frm.Show()
            ctr = 0
            Hide()
        ElseIf ctr < 3 Then
            MessageBox.Show("Incorrect Subject Code,User Name or Password. Please try again.", "Wrong data entered", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
        Else
            MsgBox("Unathorized access. Aborting...")
            Close()
        End If
        dr1.Close()
    End If
End Sub
Dim frm作为新标记SentryFRM
将标志变暗为布尔值
flag=False
如果cboForm.Text=“”或cboAcadYear.Text=“”或cboSubjCode.Text=“”或txtexsername.Text=“”或txtPassword.Text=“”,则
MessageBox.Show(“请不要将任何字段留空”,“空白字段”,MessageBoxButtons.OK,MessageBoxIcon.Error)
其他的
cmd=New SqlCommand(“从StudentDetails.Programs a,StudentDetails.Subjects b,RegistrationDetails.Registration c中选择a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.UserID,b.UserID,b.UserID,b.UserID,b.Password,c.Term。程序a,StudentDetails.Subjects,b,RegistrationDetails.Registration c,其中b.SubjectID='”&CBOSubjectId.SelectedItem&'”和b.UserID='&txtUserName.Text&'”和b.Password='&Txt,中国)
cmd.Parameters.AddWithValue(“@UserID”,txtUserName.Text)”保护数据库不受SQL注入的影响
cmd.Parameters.AddWithValue(“@Password”,txtPassword.Text)”保护数据库不受SQL注入的影响
dr1=cmd.ExecuteReader
ctr=ctr+1
如果是dr1,请阅读
frm.Show()
ctr=0
隐藏()
ElseIf ctr<3则
MessageBox.Show(“主题代码、用户名或密码不正确。请重试。”,“输入的数据错误”,MessageBoxButtons.OK,MessageBoxIcon.Asterisk)
其他的
MsgBox(“未授权访问。正在中止…”)
关闭()
如果结束
dr1.Close()
如果结束
端接头

使用参数化查询

    Dim cmdText As String = _
                    "INSERT INTO Customer(UserName, [Password]) VALUES (@UserName,@Password)"
    Dim cmd As SqlCommand = New SqlCommand(cmdText, con)
    With cmd.Parameters
        .Add(New SqlParameter("@UserName", txtUserName.Text))
        .Add(New SqlParameter("@Password", txtPassword.Text))
    End With

另外,检查是否有字段留空的更好方法是使用String.IsNullOrEmpty()方法。您的方法不会检测到任何空字符或空格字符。

在.NET成员资格提供程序中,您将获得由.NET库提供的哈希和种子,该库应正确实现。对于滚动您自己的解决方案,此IMHO更受欢迎。有一个

如果您希望实现,那么种子设定和散列部分并不十分复杂。种子设定可以非常简单,只需在散列原始密码之前向其添加一个随机字符串。然后将散列和种子存储在数据库中。当用户提供密码时,您只需读取种子并比较散列即可。请注意,当您出于加密目的生成随机字符串时,您不应该依赖于
random
,而应该使用一些。
System.Security.Cryptography
还包含许多合适的哈希算法(sha1、sha256或类似算法)的实现


再次强调:在我看来,您应该使用
SqlMembershipProvider
来寻求解决方案,以避免重新实现安全关键的东西。

哈希与SQL注入无关。您需要学习如何正确使用参数。(您还需要对SqlMembershipProvider进行详细说明,也许您还知道一篇文章在这方面做得更进一步吗?SqlMembershipProvider只是使用MS SQL作为用户存储的成员资格提供程序的具体化。它非常灵活,似乎提供了所需的功能。成员资格是一个大话题,但msdn提供了信息。为了获得更多关于成员资格的信息,我认为可以单独提出一个问题。请具体说明我应该如何在代码中使用String.IsNullOrEmpty()方法。如果您能为我这样做,我将不胜感激。如果String.IsNullOrEmpty(strName)然后Messagebox.Show(“String为空”),哦,请,我非常渴望使用您的建议,但我仍然看不到如何在我的编码中进行。请按照您的建议编辑我的代码。提前谢谢。我现在知道了。我很感激。