2015-09-16 4 views
6

Я только что установил zendcart в своей системе, я попытался слить базу данных сайта, которую я уже имел с базой данных zendcart.Zendcart - Объединение существующей базы данных пользователя с базой данных zendcart

Мне удалось правильно все порт, только пароли, похоже, не работают. моя собственная система md5 хэширует пароли, когда они входят в БД, я не знаю, как zencart хеширует это пароль, но насколько я могу видеть, это почти тот же алгоритм, что и в настоящее время, я использую только с 3 символами, прикрепленными к нему.

ex current password: sad97213sd123js123 
ex zendcart pass: sad97213sd123js123:c1 

Как я могу resalt моих паролей, чтобы соответствовать zendcarts критериев, или .. Как я могу редактировать zendcart принимать соленые пароли, генерируемых с помощью других средств, чем zendcart-х

Спасибо расширенных

+0

обе версии zendcart такие же? – urfusion

+0

Приношу извинения за путаницу. Только одна из систем - zencart, другая - обычная CMS. – Sjef92

+0

Я верю, что «zendcart» означает «Zen Cart». –

ответ

2

Внутри class.zcPassword.php (/ включает/классы), вы найдете его:

/** 
    * Determine the password type 
    * 
    * Legacy passwords were hash:salt with a salt of length 2 
    * php < 5.3.7 updated passwords are hash:salt with salt of length > 2 
    * php >= 5.3.7 passwords are BMCF format 

он описывает наследие сравнить это делает, прежде чем решить, что делать с го е пароли, используя ircmaxell/password-compat библиотеку, прямо здесь:

function detectPasswordType($encryptedPassword) 
    { 
    $type = 'unknown'; 
    $tmp = explode(':', $encryptedPassword); // try to break the hash in an array of 2 elements at :, first being the hash, second a suffix 
    if (count($tmp) == 2) { // if it breaks... 
     if (strlen($tmp [1]) > 2) { //...then check if 2nd has a length > 2... 
     $type = 'compatSha256'; //...if it does, it's SHA2 
     } elseif (strlen($tmp [1]) == 2) {//...if not, make sure it's == 2... 
     $type = 'oldMd5';// ...just to confirm it's MD5 
     } 
    } 
    return $type; // and return the string to be treated ahead 
    } 

EDIT: //commented the code.

Как вы можете видеть, :c1 является только соль суффикс (он explodes, когда он находит его) он читает, чтобы определить какой алгоритм он должен выполнять для обеспечения обратной совместимости (в вашем случае MD5) в соответствии с версией PHP, поэтому хэши одинаковы.

Я предлагаю вам просто удалить суффикс в конце всех ваших паролей по адресу : или использовать эту функцию и ее зависимости, чтобы игнорировать эту проверку.

+0

Вы предлагаете просто удалить: c1 из пароля будет работать так же хорошо? – Sjef92

+0

@ Sjef92 Если ваша новая система не запускает ту же функцию, Zen Cart работает, чтобы проверить устаревшее хэширование, тогда да. Суффикс не даст вам никаких проблем. Если у вас есть какие-либо сомнения по поводу его реализации, просто дайте свою базу данных в файл резервной копии и сделайте это! Но я в этом уверен. –

Смежные вопросы