2012-03-14

EC-CUBE(2.11.5): パスワードのハッシュ化処理

Webシステムではユーザのパスワードはsha1等のハッシュアルゴリズムを使ってハッシュ化(暗号化)してDBに保存するのが普通です。今日はEC-CUBEの管理者のパスワードがわからなかったのでどのようにパスワードをハッシュ化しているか調べていました。

EC-CUBE(2.11系)では基本的には下記の要領でパスワードハッシュを生成しているようです。

hash_hmac(PASSWORD_HASH_ALGOS, "生パスワード:AUTH_MAGIC", salt);
PASSWORD_HASH_ALGOS data/config/config.php内のPASSWORD_HASH_ALGOSの値(“sha256”等)
生パスワード 入力するパスワード
AUTH_MAGIC data/config/config.php内のAUTH_MAGICの値
salt dtb_member(管理者)またはdtb_customer(会員)テーブルのsaltの値

ハッシュ化の処理はSC_Utils(data/class/util/SC_Utils.php)のsfGetHashString()が行なっていました。

/**
     * パスワードのハッシュ化
     *
     * @param string $str 暗号化したい文言
     * @param string $salt salt
     * @return string ハッシュ暗号化された文字列
     */
    function sfGetHashString($str, $salt) {
        $res = '';
        if ($salt == '') {
            $salt = AUTH_MAGIC;
        }
        if ( AUTH_TYPE == 'PLAIN') {
            $res = $str;
        } else {
            $res = hash_hmac(PASSWORD_HASH_ALGOS, $str . ":" . AUTH_MAGIC, $salt);
        }
        return $res;
    }