PrestaShop 1.7.x теперь использует bcrypt в качестве предпочтительного метода хеширования (хотя md5 все еще поддерживается).
Чтобы лучше понять поведение PrestaShop v1.6.x против 1.7.x для проверки паролей, давайте посмотрим на метод getByEmail()
в классе Customer:
/**
* Return customer instance from its e-mail (optionally check password).
*
* @param string $email e-mail
* @param string $plaintextPassword Password is also checked if specified
* @param bool $ignoreGuest
*
* @return bool|Customer|CustomerCore Customer instance
*/
public function getByEmail($email, $plaintextPassword = null, $ignoreGuest = true)
Если указано $plaintextPassword
, зашифрованная версия пароля возвращается с помощью:
$this->passwd = $crypto->hash($plaintextPassword);
Класс хеширования можно создать, выполнив:
$crypto = ServiceLocator::get('\\PrestaShop\\PrestaShop\\Core\\Crypto\\Hashing');
Решение для вашего примера с использованием PrestaShop 1.7 классы / методы:
<?php
namespace PrestaShop\PrestaShop\Core\Crypto;
include('config/config.inc.php');
$plaintextPassword = '123456';
$crypto = new Hashing;
$encryptedPassword = $crypto->hash($plaintextPassword, _COOKIE_KEY_);
echo 'Clear: '.$plaintextPassword.'<br />Encrypted: '.$encryptedPassword;
/* Result (example)
Clear: 123456
Encrypted: $2y$10$6b460aRLklgWblz75NAMteYXLJwjfV6a/uN8GJKgJgPDBuNhHs.ym */
Альтернативное решение, без необходимости включать какие-либо файлы / методы PrestaShop:
<?php
$plaintextPassword = '123456';
$encryptedPassword = password_hash($plaintextPassword, PASSWORD_BCRYPT);
echo var_dump(password_verify($plaintextPassword, $encryptedPassword)); // True if encryption is matching
Надеюсь, это поможет.