密碼絕對不能用明文儲存於資料庫,一定要 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
留言