密碼絕對不能用明文儲存於資料庫,一定要 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
最後修改日期: 2015 年 01 月 28 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。