關於 PHP, Linux, Open Source 及個人生活記載的網誌。
RSS icon
  • PHP 加密在資料庫的密碼

    Posted on September 19th, 2006 Sam Tang 5 comments

    當用戶數量比較多時,用資料庫儲存用戶名稱及密碼是很好的選擇,但如果直接將用戶的密碼儲存在資料庫,即使資料庫要密碼才可以登入也有安全性的問題。例如系統管理員或者 Web Hosting 的員工便可以看到用戶的密碼,所以先將用戶密碼加密是必要的步驟。

    PHP 內建了 MD5() 單向加密演算法,即只可加密,而不可以反向解密,以下是利用 MD5() 函式的具體方法:

    這裡是將用戶密碼用 MD5() 加密後加插入資料庫:

    CODE:
    1. <?php
    2. $db_conn = mysql_connect("host", "db_user", "db_pass");
    3. mysql_select_db("db_name", $db_conn);
    4.  
    5. // 插入資料表的 $password 用了 md5 加密
    6. mysql_query("insert into users values
    7.                         ('$username', '".md5($password)."')");
    8. ?>

    檢查用戶名稱及密碼:

    CODE:
    1. <?php
    2. $db_conn = mysql_connect("host", "db_user", "db_pass");
    3. mysql_select_db("db_name", $db_conn);
    4.  
    5. $sql = mysql_query("select * from users where
    6.                         `username`='$username' and
    7.                         `password`='".md5($password)."'");
    8.  
    9. if (mysql_num_rows($sql) > 0) {
    10.     // 用戶名稱及密碼正確
    11. } else {
    12.     // 用戶名稱及密碼錯誤
    13.     exit();
    14. }
    15. ?>

    用以上方法寫出來的登入系統,只用用戶是知道自己的密碼,系統管理員最多只能夠修改密碼,而不能看到源始密碼是什麼。


     

    5 responses to “PHP 加密在資料庫的密碼”

    1. [...] PHP 加密在資料庫的密碼 – Real-Blog (tags: Tech WebDev PHP Security Tips) [...]

    2. how about using sha1?
      md5 is known to be insecure nowadays.

    3. 可以使用 MYSQL 內建的 MD5 函數可能處理得更快 ..

    4. 請小心SQL injection
      http://en.wikipedia.org/wiki/SQL_injection

    5. 以上的問題我也有想過,只是想給初學者看來較簡單。

      Blog 的互動性真是那麼厲害,貼出不久便有回應補充及修正。

    Leave a reply

    *
    To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
    Click to hear an audio file of the anti-spam word