密碼絕對不能用明文儲存於資料庫,一定要 hash 編碼過
底下有兩個 function,hash_pwd 是把密碼作編碼, compare_pwd 是驗證密碼對不對
<?php function hash_pwd($pwd, $salt = false){ if (!$salt) { $salt = md5(mt_rand()); } return $salt . md5($salt . $pwd); } function compare_pwd($pwd, $pwd_hashed){ $salt = substr( $pwd_hashed, 0, 32 ); return $pwd_hashed === hash_pwd($pwd, $salt); }
假設我的密碼是 12345678,它會再隨機產生一組字串加入 12345678 裡作編碼
print hash_pwd('12345678');
如下,每執行一次都會不一樣
0429d827f16c0f6d1b708f98f3de4a215caf15ccd920c44d79077bada1dfa829
然後驗證是否為對的密碼,就是拿 12345678 與 編碼過的字串比對,得到 true or 1 就是 match 的啦
print compare_pwd('12345678','0429d827f16c0f6d1b708f98f3de4a215caf15ccd920c44d79077bada1dfa829');
https://alias.io/2010/01/store-passwords-safely-with-php-and-mysql/ http://www.gregboggs.com/php-blowfish-random-salted-passwords/ http://janochen.blogspot.tw/2008/10/blog-post.html
留言