123456md5('123456') → e10adc3949ba59abbe56e057f20f883ed82a35,存於 salt 欄位)。md5(md5('123456') . 'd82a35') → 7839dc9437013b5c11a5d86e9b8350e9(最終存入 password 欄位)。<?php
$salt = 'd82a35'; // 從資料庫讀取
$input = '123456';
$hash = md5(md5($input) . $salt);
echo $hash; // 7839dc9437013b5c11a5d86e9b8350e9
<?php
// 註冊時
$hash = password_hash($password, PASSWORD_DEFAULT); // 自動生成 salt、使用 bcrypt
// 登入驗證
if (password_verify($input, $hash)) { /* 成功 */ }
password_hash() 自動處理 Salt、成本因子、演算法升級。password_verify() 防時序攻擊。PASSWORD_BCRYPT、PASSWORD_ARGON2I、PASSWORD_ARGON2ID。舊系統可採用「雙軌制」:登入時先用新 password_verify,失敗再落回舊 Discuz 算法;成功則用 password_hash 重新雜湊並更新資料庫,漸進式升級。