Vb.net 为什么我的密码没有使用AES加密在数据库中加密?
我想用AES加密我的密码,但它会在数据库中保存为纯文本。我用互联网上的例子运行了一些代码,它确实加密了数据库中的纯文本。我不知道为什么它不能在我的代码中实现。帮助我加密密码:) 以下是我迄今为止所尝试的:Vb.net 为什么我的密码没有使用AES加密在数据库中加密?,vb.net,aes,password-encryption,encryption-asymmetric,Vb.net,Aes,Password Encryption,Encryption Asymmetric,我想用AES加密我的密码,但它会在数据库中保存为纯文本。我用互联网上的例子运行了一些代码,它确实加密了数据库中的纯文本。我不知道为什么它不能在我的代码中实现。帮助我加密密码:) 以下是我迄今为止所尝试的: Private Function Encrypt(clearText As String) As String Dim EncryptionKey As String = "MAKV2SPBNI99212" Dim clearBytes As Byte()
Private Function Encrypt(clearText As String) As String
Dim EncryptionKey As String = "MAKV2SPBNI99212"
Dim clearBytes As Byte() = Encoding.Unicode.GetBytes(clearText)
Using encryptor As Aes = Aes.Create()
Dim pdb As New Rfc2898DeriveBytes(EncryptionKey, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
encryptor.Key = pdb.GetBytes(32)
encryptor.IV = pdb.GetBytes(16)
Using ms As New MemoryStream()
Using cs As New CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)
cs.Write(clearBytes, 0, clearBytes.Length)
cs.Close()
End Using
clearText = Convert.ToBase64String(ms.ToArray())
End Using
End Using
Return clearText
End Function
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Dim cn As String = ConfigurationManager.ConnectionStrings("xxxx").ConnectionString
Using cs As New SqlConnection(cn)
Using cmd As New SqlCommand("SELECT * FROM zzzz")
Using sda As New SqlDataAdapter()
Dim dt As New DataTable()
cmd.CommandType = CommandType.Text
cmd.Connection = cs
sda.SelectCommand = cmd
sda.Fill(dt)
End Using
End Using
End Using
End If
End Sub
Private Sub btnSubmitAdd_Click(sender As Object, e As EventArgs) Handles btnSubmitAdd.Click 'FUNCTION IS EXECUTED WHEN BUTTON SUBMIT IS CLICKED
If Request.Form("pass1") = Request.Form("pass2") Then 'CHECK IF FIRST AND SECOND PASSWORD IS THE SAME
cs.Open()
cmd.CommandText = "INSERT INTO zzzz (user_id, user_name, user_password, user_rank, user_section, user_securitycode) VALUES ('" & Request.Form("userid") & _
"','" & Request.Form("name") & "','" & Request.Form("pass1") & "','" & Request.Form("privilege") & _
"', '" & Request.Form("section") & "', '" & Request.Form("user_securitycode") & "')"
cmd.Connection = cs
cmd.Parameters.AddWithValue("@user_password", Encrypt(Request.Form("pass1")))
cmd.ExecuteNonQuery()
cs.Close()
您对本地数据库对象和
使用页面中的块做得非常好。我很抱歉看到你因为这个按钮代码而放弃了它。尽管如此,我不认为在页面中拖拽所有数据,然后在不使用的情况下丢弃这些数据有什么意义
插入的每个值都应设置为参数
。如果做不到这一点,就会为sql注入打开大门。我看到您尝试使用密码执行此操作,但在Insert语句中没有名为“”@user\u password“
的参数。这就是为什么它没有被加密
对于Sql Server,.Add
方法优于.AddWithValue
。看见
和
还有一个:
这是另一个
我不得不猜测参数的数据类型和字段大小。检查数据库中的实际值,并相应地调整代码。如果参数是数字类型,请确保将.Value
变量转换为正确的类型
我有点担心userid。新用户如何拥有用户ID?我怀疑这个字段是表的主键,是一个标识字段(自动递增)。您不在字段列表中包含标识字段,也不尝试为插入传递任何值
我对web应用知之甚少,但Request.Form(“name”)
对我来说很奇怪。我认为这些只是请求(“名称”)
我甚至没看你的密码。问题是为什么你的密码没有加密,我希望我能回答。你对本地数据库对象和使用页面中的块做得很好。加载。我很抱歉看到你因为这个按钮代码而放弃了它。尽管如此,我不认为在页面中拖拽所有数据,然后在不使用的情况下丢弃这些数据有什么意义
插入的每个值都应设置为参数
。如果做不到这一点,就会为sql注入打开大门。我看到您尝试使用密码执行此操作,但在Insert语句中没有名为“”@user\u password“
的参数。这就是为什么它没有被加密
对于Sql Server,.Add
方法优于.AddWithValue
。看见
和
还有一个:
这是另一个
我不得不猜测参数的数据类型和字段大小。检查数据库中的实际值,并相应地调整代码。如果参数是数字类型,请确保将.Value
变量转换为正确的类型
我有点担心userid。新用户如何拥有用户ID?我怀疑这个字段是表的主键,是一个标识字段(自动递增)。您不在字段列表中包含标识字段,也不尝试为插入传递任何值
我对web应用知之甚少,但Request.Form(“name”)
对我来说很奇怪。我认为这些只是请求(“名称”)
我甚至没看你的密码。问题是为什么你的密码没有加密,我希望我能回答。哦,天哪!Sql注入。如果我改变将数据插入数据库的方式以避免Sql注入,它会加密我的密码吗?我正在寻找答案。等等,真的吗?天哪,非常感谢。我知道Mary给了你一个很好的答案,但是它存储普通密码的原因是,“,”&Request.Form(“name”)和“,”&Request.Form(“pass1”)和“,”&Request.Form(“privilege”)和“&Request.Form(“privilege”)应该是”,“&Request.Form(“name”)和“,@user\u password”,“Request.Form”(&Request.Form(“privilege”)&
使用参数(我可能有一些引号错误)。哦,天哪!Sql注入。如果我改变将数据插入数据库的方式以避免Sql注入,它会加密我的密码吗?我正在寻找答案。等等,真的吗?天哪,非常感谢。我知道Mary给了你一个很好的答案,但是它存储普通密码的原因是,“,”&Request.Form(“name”)和“,”&Request.Form(“pass1”)和“,”&Request.Form(“privilege”)和“&Request.Form(“privilege”)应该是”,“&Request.Form(“name”)和“,@user\u password”,“Request.Form”(&Request.Form(“privilege”)&&
使用参数(我可能有一些引用错误)。详细解释,我非常感谢。今天有新课!我会尽力改变它,非常感谢你,玛丽。解释得很详细,我真的很感激。今天有新课!玛丽,我会尽力改变的,非常感谢你。
Private Sub btnSubmitAdd_Click(sender As Object, e As EventArgs) Handles btnSubmitAdd.Click 'FUNCTION IS EXECUTED WHEN BUTTON SUBMIT IS CLICKED
Dim insert = "INSERT INTO zzzz (user_id, user_name, user_password, user_rank, user_section, user_securitycode) VALUES (@userid,@name,@password,@privilege,@section,@securityCode)"
If Request.Form("pass1") = Request.Form("pass2") Then 'CHECK IF FIRST AND SECOND PASSWORD IS THE SAME
Using cs As New SqlConnection(cn),
cmd As New SqlCommand(insert, cs)
cmd.Parameters.Add("@userid", SqlDbType.Int).Value = CInt(Request.Form("userid"))
cmd.Parameters.Add("@name", SqlDbType.VarChar, 100).Value = Request.Form("name")
cmd.Parameters.Add("@password", SqlDbType.VarChar, 100).Value = Encrypt(Request.Form("pass1"))
cmd.Parameters.Add("@privilege", SqlDbType.VarChar, 100).Value = Request.Form("privilege")
cmd.Parameters.Add("@section", SqlDbType.VarChar, 100).Value = Request.Form("section")
cmd.Parameters.Add("@securityCode", SqlDbType.VarChar, 100).Value = Request.Form("user_securitycode")
cs.Open()
cmd.ExecuteNonQuery()
End Using
End If
End Sub