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密碼認證方式

$match = JUserHelper::verifyPassword($credentials['password'], $result->password, $result->id);
//JUserHelper::verifyPassword(密碼, 資料表內的密碼, 使用者帳號)

php password_verify()驗證密碼方式

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

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

<?php

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

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

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

Copyright © 2018 ucamc