2014-10-19 63 views
0

當我有這個簡單的MD5加密,但它似乎並沒有工作,當我檢查我的數據庫沒有已與我在密碼文本框中鍵入改變了我的密碼不會被加密。爲什麼插入VB.NET

這裏是我的代碼:

Dim strText As String = MetroTextBox6.Text 
Dim bytHashedData As Byte() 
Dim encoder As New UTF8Encoding() 
Dim md5Hasher As New MD5CryptoServiceProvider 

Using con = new MySqlConnection("server = localhost; user id = root; database = db; password = root") 
Using cmd = con.CreateCommand() 
con.Open() 
Dim sqlQuery As String = "INSERT INTO candidate(uname,pword) VALUES("@votes, @pword") 

With cmd 
    .CommandText = sqlQuery 
    .Parameters.AddWithValue("@uname", TextBox4.Text) 
    .Parameters.AddWithValue("@pword, MetroTextBox6.Text) 

    .ExecuteNonQuery() 

bytHashedData = md5Hasher.ComputeHash(encoder.GetBytes(strText)) 

End With 
MsgBox("Record Inserted") 
End Using 
+2

...因爲您在*之前插入值*,所以計算散列,然後您不對散列做任何事情。你如何期待數據庫接收一個你還沒有創建的值? SQL設計得非常好,但它並不具有先見之明。 – David 2014-10-19 14:47:42

+0

你也沒有輸入密碼 - 你是哈希它是一種方式。你不能解密它 – Plutonix 2014-10-19 15:02:12

+0

沒有鹽的哈希? – Codexer 2014-10-20 00:54:52

回答

2

那是因爲你不使用你的任何創造的哈希值。爲字符串創建哈希代碼不會將字符串更改爲哈希代碼(即使這樣做,您仍然在將字符串發送到數據庫後執行此操作)。

計算數據庫調用之前的散列碼,並創建散列碼的字符串表示把字符串:

bytHashedData = md5Hasher.ComputeHash(encoder.GetBytes(strText)) 
strText = Convert.ToBase64String(bytHashedData) 

然後使用與散列碼而不是字符串從文本字符串:

.Parameters.AddWithValue("@pword, strText)