php MD5加密詳解

來源:互聯網
上載者:User
  1. mysql>CREATE TABLE members (
  2. ->username CHAR(14) NOT NULL,
  3. ->password CHAR(32) NOT NULL,
  4. ->PRIMARY KEY(username)
  5. ->);
複製代碼

然後,我們可以輸入使用者的資料到該表中:使用者名稱 密碼Tom keloD1C377lKEJohn ba1T7vnz9AWgkBill paLUvRWsRLZ4U

這些加密的口令對應的明碼分別是Tom、John和Bill。我們將根據口令的前二個字母建立幹擾串:

  1. <?php
  2. $enteredPassword.
  3. $salt = substr($enteredPassword, 0, 2);
  4. $userPswd = crypt($enteredPassword, $salt);
  5. // $userPswd然後就和使用者名稱一起儲存在MySQL 中
  6. crypt()和Apache的口令-應答驗證系統的應用
  7. $host = "localhost"; //主機
  8. $username = "Tom"; //使用者名稱
  9. $passwd = "Hello world"; //密碼
  10. $db = "users"; //資料庫名
  11. // 設定是否通過驗證標誌,預設為否
  12. $authorization = 0;
  13. // 提示使用者輸入帳號和密碼
  14. if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)){
  15.   mysql_pconnect($host, $username, $passwd) or die("不能串連到MySQL伺服器!");
  16.   mysql_select_db($db) or die("不能選擇資料庫!");
  17.   // 進行加密
  18.   $salt = substr($PHP_AUTH_PW, 0, 2);
  19.   $encrypted_pswd = crypt($PHP_AUTH_PW, $salt);
  20.   //SQL查詢語句
  21.   $query = "SELECT username FROM members WHERE username = \'$PHP_AUTH_USER\' AND password = \'$encrypted_pswd\'";
  22.   // 執行查詢
  23.   if (mysql_numrows(mysql_query($query)) == 1) {
  24. $authorization = 1;
  25.   }
  26. }
  27. if (! $authorization){
  28.   header(\'WWW-Authenticate: Basic realm="使用者驗證"\');
  29.   header(\'HTTP/1.0 401 Unauthorized\');
  30.   print "無法通過驗證";
  31.   exit;
  32. }else {
  33.   print "已經加密";
  34. }
  35. ?>
複製代碼

在預設狀態下使用的 crypt()並不是最安全的,所以如果需要較高的安全效能,就需要其他更好的演算法,比如md5(),這一函數使用MD5散列演算法。

如何通過MD5方式進行加密?

PHP中通過MD5方式加密的函數有md5(),它的一個作用是混編。

一個混編函數可以將一個可變長度的資訊變換為具有固定長度被混編過的輸出,也被稱作"資訊文摘",這是十分有用的,因為 一個固定長度的字串可以用來檢查檔案的完整性和驗證數位簽章與使用者身份。PHP內建的md5()混編函數將把一個可變長度的資訊轉換為128位(32個字元)的資訊文摘。混編的一個有趣的特點是:不能通過分析混編後的資訊得到原來的明碼,因為混編後的結果 與原來的明碼內容沒有依賴關係。即便只改變一個字串中的一個字元,也將使得MD5混編演算法計算出二個截然不同的結果。我們首先來看下錶的內容及其相應的結果:

使用md5()混編字串

  1. <php
  2. $input = "Hello,PHP world!";
  3. $output = md5($input);
  4. print "輸出: $output ";
  5. ?>
複製代碼

結果:輸出: 7996b5e0804042fd531907a4900f190e注意,結果的長度為32個字元。我們把$input的值稍微改變一下:使用md5()對一個稍微變化的字串進行混編

  1. <?php
  2. $input = "Hello,PHP World!";
  3. $output = md5($input);
  4. print "輸出: $output ";
  5. ?>
複製代碼

結果:hash2: f0456d48ed06a5c35b1e42561fa7a016

可以發現,儘管二個結果的長度都是32個字元,但明文中一點微小的變化使得結果發生了很大的變化,我們可以利用這個特點來檢查資料中微小變化。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.