2014-12-31 116 views
0

我有一個mysql表用戶與兩個字段username varchar()和密碼鹽醃散列md5 28字節/「128咬」 - asp.net web窗體與文本框1「用戶」w TextBox2中的「密碼」如何比較密碼與鹽漬散列密碼

我如何可以比較在TextBox2中的客戶端輸入的密碼進行驗證

這是我簡單的身份驗證功能,我需要改變代碼的哈希比較密碼在用戶表 相同1

Public Function Authenticate(ByVal id As String, ByVal pas As String) As Integer 

    Dim strConnectionString As String = ("Data Source=localhost;port=3306;Database=transfer;User ID=root;Password=password;Convert Zero Datetime=True") 
    Dim instsqlconnection As MySqlConnection = New MySqlConnection(strConnectionString) 

    instsqlconnection.Open() 

    Dim daAuthors As New MySqlDataAdapter("Select * From login_detail", instsqlconnection) 
    dsPubs = New DataSet("Employee") 
    daAuthors.Fill(dsPubs, "login") 
    instsqlconnection.Close() 


    Dim drResult As DataRow() = dsPubs.Tables("login").Select(" login_id = '" + id.ToString() + "'") 

    If (drResult.Length > 0) Then 
     If drResult(0)("password").ToString().Trim() = pas Then 

      Return 1 
     Else 
      Return 2 
     End If 

    Else 
     Return 0 
    End If 

End Function 
+1

如何密碼獲取當它第一次被添加到數據庫時散列?你需要對輸入的密碼進行相同的操作以獲得相同的散列 – Rhumborl

+0

前12個十六進制數字(24個字符)是鹽(隨機) 後面16個十六進制數字(32個字符)是鹽漬md5散列 – user3619254

回答

1

MySQL有一個MD5函數。你可以做如下假設,對鹽的領域被稱爲

select 1 from login_detail where login_id = @yourloginId and Password = MD5(salt + @password); 

重要

MD5不存儲密碼的安全方法。即使醃製,MD5被認爲是不安全的,可以很快破碎。您應該使用安全算法,如BCrypt,SCrypt或PBKDF2。這些算法是密碼存儲的理想選擇,因爲它們使用鹽並且速度很慢,使得彩虹表生成變得更加困難。

您可以通過對已有的散列執行上述算法之一來升級現有方案。

BCrypt(MD5(鹽+密碼))當您在用戶登錄只需選擇密碼,你再存儲在表中的密碼版本,並將其設置爲1

SELECT * FROM login_detail WHERE login_id = @username 

hashed = drResult(0)("password") 
version = drResult(0)("version") 
salt = drResult(0)("salt") 

if(version = 1) then 
    password = MD5(salt + password) 
end if 

if(Bcrypt.Verify(password,hashed)) 
    if(version = 1) then 
     Update password = BCrypt(password), version = 2 WHERE login_id = @username 
    end if 

    return true 
End If 

return false 
1

首先,您必須將密碼轉換爲用戶輸入的md5。一旦你從string轉換密碼md5 string

你可以簡單的調用這個查詢

Select 1 from login_detail ld where ld.login_id = @yourloginId and ld.Password = @md5Password; 
+0

謝謝我現在瞭解開始工作的邏輯 – user3619254

+0

好。如果我的答案解決了你的問題,那麼你可以接受它作爲答案。 –