- mysql>CREATE TABLE members (
- ->username CHAR(14) NOT NULL,
- ->password CHAR(32) NOT NULL,
- ->PRIMARY KEY(username)
- ->);
複製代碼然後,我們可以輸入使用者的資料到該表中:使用者名稱 密碼Tom keloD1C377lKEJohn ba1T7vnz9AWgkBill paLUvRWsRLZ4U 這些加密的口令對應的明碼分別是Tom、John和Bill。我們將根據口令的前二個字母建立幹擾串:
- <?php
- $enteredPassword.
- $salt = substr($enteredPassword, 0, 2);
- $userPswd = crypt($enteredPassword, $salt);
- // $userPswd然後就和使用者名稱一起儲存在MySQL 中
- crypt()和Apache的口令-應答驗證系統的應用
- $host = "localhost"; //主機
- $username = "Tom"; //使用者名稱
- $passwd = "Hello world"; //密碼
- $db = "users"; //資料庫名
- // 設定是否通過驗證標誌,預設為否
- $authorization = 0;
- // 提示使用者輸入帳號和密碼
- if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)){
- mysql_pconnect($host, $username, $passwd) or die("不能串連到MySQL伺服器!");
- mysql_select_db($db) or die("不能選擇資料庫!");
- // 進行加密
- $salt = substr($PHP_AUTH_PW, 0, 2);
- $encrypted_pswd = crypt($PHP_AUTH_PW, $salt);
- //SQL查詢語句
- $query = "SELECT username FROM members WHERE username = \'$PHP_AUTH_USER\' AND password = \'$encrypted_pswd\'";
- // 執行查詢
- if (mysql_numrows(mysql_query($query)) == 1) {
- $authorization = 1;
- }
- }
- if (! $authorization){
- header(\'WWW-Authenticate: Basic realm="使用者驗證"\');
- header(\'HTTP/1.0 401 Unauthorized\');
- print "無法通過驗證";
- exit;
- }else {
- print "已經加密";
- }
- ?>
-
複製代碼在預設狀態下使用的 crypt()並不是最安全的,所以如果需要較高的安全效能,就需要其他更好的演算法,比如md5(),這一函數使用MD5散列演算法。 如何通過MD5方式進行加密? PHP中通過MD5方式加密的函數有md5(),它的一個作用是混編。 一個混編函數可以將一個可變長度的資訊變換為具有固定長度被混編過的輸出,也被稱作"資訊文摘",這是十分有用的,因為 一個固定長度的字串可以用來檢查檔案的完整性和驗證數位簽章與使用者身份。PHP內建的md5()混編函數將把一個可變長度的資訊轉換為128位(32個字元)的資訊文摘。混編的一個有趣的特點是:不能通過分析混編後的資訊得到原來的明碼,因為混編後的結果 與原來的明碼內容沒有依賴關係。即便只改變一個字串中的一個字元,也將使得MD5混編演算法計算出二個截然不同的結果。我們首先來看下錶的內容及其相應的結果: 使用md5()混編字串
- <php
- $input = "Hello,PHP world!";
- $output = md5($input);
- print "輸出: $output ";
- ?>
-
複製代碼結果:輸出: 7996b5e0804042fd531907a4900f190e注意,結果的長度為32個字元。我們把$input的值稍微改變一下:使用md5()對一個稍微變化的字串進行混編
- <?php
- $input = "Hello,PHP World!";
- $output = md5($input);
- print "輸出: $output ";
- ?>
複製代碼結果:hash2: f0456d48ed06a5c35b1e42561fa7a016 可以發現,儘管二個結果的長度都是32個字元,但明文中一點微小的變化使得結果發生了很大的變化,我們可以利用這個特點來檢查資料中微小變化。 |