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 — 驗證密碼是否和散列值匹配