在前面的介紹中,我們提到網(wǎng)站往往將用戶的賬號、密碼等信息使用非加密的方式保存到數(shù)據(jù)庫,比如賬號使用類型為VarChar的UserCount字段,同樣,密碼也是采用類型為VarChar的Password字段。但是,如果我們打算采用MD5加密方式存儲密碼信息,就必須改變密碼字段PassWord的類型為16為二進(jìn)制方式,這個其實(shí)我們也不難理解,因?yàn)樵谇懊娴慕榻B中,我們知道加密以后的輸出,是使用二進(jìn)制數(shù)組的,所以,這里必須做相應(yīng)的改變。
當(dāng)用戶注冊成功,正式建立一個賬號的時候,數(shù)據(jù)庫中就必須為這個用戶增加一條記錄。以下的程序代碼實(shí)現(xiàn)了建立一個賬號的功能,在頁面中,程序要求用戶輸入賬號、密碼等信息,然后,將這些信息作為賬號信息存入名為UserCount的數(shù)據(jù)表,在這個表中,用戶密碼是使用MD5加密保存的。下面就是實(shí)現(xiàn)以上頁面的具體代碼:
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server" language="VB">
Sub CreateAccount(sender as Object, e as EventArgs)
'1. 建立數(shù)據(jù)庫連接
Const strConnString as String = "connection string"
Dim objConn as New SqlConnection(strConnString)
'2. 建立Command對象
Dim strSQL as String = _
"INSERT INTO UserAccount(Username,Password) " & _
"VALUES(@Username, @Password)"
Dim objCmd as New SqlCommand(strSQL, objConn)
'3. SQL參數(shù)
Dim paramUsername as SqlParameter
paramUsername= New SqlParameter("@Username", SqlDbType.VarChar, 25)
paramUsername.Value = txtUsername.Text
objCmd.Parameters.Add(paramUsername)
'加密用戶密碼
Dim md5Hasher as New MD5CryptoServiceProvider()
Dim hashedBytes as Byte()
Dim encoder as New UTF8Encoding()
hashedBytes=md5Hasher.ComputeHash(encoder.GetBytes(txtPwd.Text))
Dim paramPwd as SqlParameter
paramPwd = New SqlParameter("@Password", SqlDbType.Binary, 16)
paramPwd.Value = hashedBytes
objCmd.Parameters.Add(paramPwd)
'加入數(shù)據(jù)庫
objConn.Open()
objCmd.ExecuteNonQuery()
objConn.Close()
End Sub
</script>
<form runat="server">
<h1>建立一個賬號</h1>
用戶名:<asp:TextBox runat="server" id="txtUsername" />
<br />密碼:
<asp:TextBox runat="server" id="txtPwd" TextMode="Password" />
<p><asp:Button runat="server" Text="建立用戶賬號"
OnClick="CreateAccount" /></p>
</form>
在以上程序?qū)崿F(xiàn)的頁面中,“用戶名”和“密碼”輸入框要求用戶輸入自己的賬號和密碼,用戶輸入自己的信息以后,按“建立用戶賬號”按鈕,就可以建立一個賬號并且存入數(shù)據(jù)庫。我們同時需要特別注意,因?yàn)橐陨系某绦蚴褂玫搅薓D5加密和數(shù)據(jù)庫等功能,所以,在代碼最開頭,我們引入了幾個稍微特別一點(diǎn)的名字空間,這是不可缺少的。 我們可以看到,PassWord字段的信息是二進(jìn)制方式保存的,即使數(shù)據(jù)庫被人取得,也不可能知道密碼具體是什么意思。當(dāng)然,密碼也就不會泄露。
出處:
責(zé)任編輯:風(fēng)狗
上一頁 前言及對 MD5 的簡介 下一頁 使用 MD5 鑒別是否合法用戶
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|