Я установил libsodium на Windows для PHP 7 и разрабатываю свой проект с помощью PHPStorm. Я также установил Halite от Paragonie, который невозможно было установить, если расширение libsodium было установлено неправильно. Также IDE находит используемые функции и при нажатии на переменные и так далее открывает подходящие файлы libsodium.
Но, к сожалению, в моей настройке я получаю следующую ошибку:
Uncaught Error: Undefined constant 'Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE' in C:\Server\nginx-1.11.1\html\mywebsite\vendor\paragonie\halite\src\KeyFactory.php:344
Мой файл index.php выглядит следующим образом:
<?php
require_once 'vendor/autoload.php';
spl_autoload_register(function ($class) {
require_once $class . '.php';
});
$router = new AltoRouter();
$router->setBasePath('/' . basename(__DIR__));
require_once 'config/routes.php';
$match = $router->match();
$GLOBALS['db'] = new \config\database(true, null);
try
{
if ($match) {
$routeController = new Modules\Core\RouteController($match);
echo $routeController->bootstrap();
}
}
catch (Exception $ex)
{
//@todo log every Exception
}
Я также отправляю свою форму с Jquery, которая успешно приводит к выполнению следующей функции (которая не находит функции / переменные libsodium):
public function hash($password)
{
$this->setEncryptionKey();
return Password::hash(
$password, // string
$this->encryption_key // \ParagonIE\Halite\Symmetric\EncryptionKey
);
}
public function check($stored_hash, $password)
{
try {
if (Password::verify(
$password, // string
$stored_hash,
$this->encryption_key
)) {
return true;
}
} catch (\ParagonIE\Halite\Alerts\InvalidMessage $ex) {
// Handle an invalid message here. This usually means tampered ciphertext.
throw new \Exception($ex);
}
}
Я установил php_libsodium.dll в каталог расширений и поместил libsodium.dll в каталог сервера php. Просто для того, чтобы попробовать, я поместил его позже также в каталог system32 и в каталог Syswow64 — оба ничего не изменили.
Я только что установил библиотеку halite из paragonie с помощью composer, но использовать ее, к сожалению, сложнее, чем я думал. Я также пытался использовать расширение libsodium без Halite, но это приводило к тем же ошибкам, что не были найдены необходимые классы, константы и функции и так далее.
Я также пытался изменить свой автозагрузчик, но в любом случае странным является то, что IDE находит все без проблем, а выполнение скрипта в браузере — нет.
Чтобы использовать Halite 2.x, вам необходимо иметь:
Простой способ убедиться, что это настроено:
<?php
use \ParagonIE\Halite\Halite;
var_dump(Halite::isLibsodiumSetupCorrectly());
Если вам нужна более конкретная информация о том, что не работает, просто запустите это:
<?php
use \ParagonIE\Halite\Halite;
// TRUE enables verbose output:
Halite::isLibsodiumSetupCorrectly(true);
Скорее всего, вам нужно будет удалить / переустановить расширение PHP, скомпилированное для более новой версии общей библиотеки.
Там есть RFC сейчас обсуждается для PHP 7.1 это сделает это безболезненным в будущем, если оно будет принято. RFC прошло, годы спустя; libsodium будет в PHP 7.2.
Других решений пока нет …