PHP產生Joomla哈希密碼方法與密碼認證方式

4 月 19, 2018 | | 0 條留言

Joomla會員系統加密的方式

Joomla元件開發時,將元件內使用者帳號密碼,寫入Joomla會員系統的#__users資料表單內,需要與Joomla用戶密碼加密的方式相同,才可整合Joomla前台網站會員系統登入。

下列函式加密都嘗試使用在Joomla 3+ 以上的版本都可行,不過看Joomla自己產生的密碼與password_hash()相似,都是$2y$10$開頭,建議使用password_hash()產生,因為password_hash()在加密中包含了許多解碼的訊息。

注意 password_hash() 返回的散列包含了算法、 cost 和鹽值。因此,所有需要的信息都包含內。使得驗證函數不需要儲存額外鹽值等信息即可驗證哈希

Joomla產生密碼方法

md5()方式產生密碼

function encryptPassword($password){
    $joomla_salt = "";
    for($s = 1; $s <= 32; $s++){
        $joomla_salt .= rand(0,9);
    }
    return md5($password.$joomla_salt) . ":" . $joomla_salt;
}

password_hash()方式產生密碼

function encryptPassword($password){
    return password_hash($password, PASSWORD_DEFAULT);
}

Joomla密碼認證方式

如果密碼和散列值匹配則返回 TRUE,否則返回 FALSE 。

$password = "19600315";
$hash_password = "$2y$10$0q3mTlhkqb6DpU.ted.6wetGWyIlevK5mEJByKOgpkpjtq.Rssi9.";
$username = "abc0034";

$match = JUserHelper::verifyPassword($password , $hash_password , $username);
//JUserHelper::verifyPassword(密碼 , 資料表內的hash密碼 , 使用者帳號)

php password_verify()驗證密碼方式

(PHP 5 >= 5.5.0, PHP 7)
password_verify — 驗證密碼是否和散列值匹配

如果密碼和散列值匹配則返回 TRUE,否則返回 FALSE 。

$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

相關連結:
password_hash — 創建密碼的散列(hash)
password_verify — 驗證密碼是否和散列值匹配