首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 MD5 加密資料庫使用者密碼(二):驗證邏輯與限制探討

     編輯:關於SqlServer

密碼以 MD5 加密儲存後,因 MD5 為單向演算法,無法解密還原明文。驗證時,將使用者輸入的密碼同樣以 MD5 雜湊,再與資料庫儲存值比對即可。

ASP.NET 登入驗證範例

<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server" language="VB">
Sub Login(sender As Object, e As EventArgs)
    Const strConnString As String = "connection string"
    Dim objConn As New SqlConnection(strConnString)
    Dim strSQL As String = "SELECT COUNT(*) FROM UserAccount WHERE Username=@Username AND Password=@PassWord"
    Dim objCmd As New SqlCommand(strSQL, objConn)
    ' 參數化查詢防止 SQL Injection
    Dim paramUsername As New SqlParameter("@Username", SqlDbType.VarChar, 25)
    paramUsername.Value = txtUsername.Text
    objCmd.Parameters.Add(paramUsername)
    ' MD5 雜湊密碼
    Dim md5Hasher As New MD5CryptoServiceProvider()
    Dim hashedDataBytes As Byte() = md5Hasher.ComputeHash(New UTF8Encoding().GetBytes(txtPwd.Text))
    Dim paramPwd As New SqlParameter("@PassWord", SqlDbType.Binary, 16)
    paramPwd.Value = hashedDataBytes
    objCmd.Parameters.Add(paramPwd)
    objConn.Open()
    Dim iResults As Integer = objCmd.ExecuteScalar()
    objConn.Close()
    If iResults = 1 Then ' 正確 ' Else ' 錯誤 End If
End Sub
</script>

加密儲存的限制

  • 使用者遺失密碼時無法找回,僅能重設,失去「忘記密碼」功能。
  • 舊有明文密碼資料需全數遷移,使用者須重新註冊,轉換成本高。

結語

MD5 加密雖提升安全性,但需權衡使用者體驗與遷移成本,實務上可搭配鹽值、雙因子驗證等機制強化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved