Я хотел бы попробовать библиотеку defuse для двусторонней криптографии. Я скопировал каталог и подкаталоги defuse в мой корневой веб-каталог и файл .phar в /var/www/lib/defuse-crypto.phar в соответствии с инструкциями InstallAndVerify.md. В мой тестовый скрипт я включил
require_once('/var/www/lib/defuse-crypto.phar');
Однако я получаю следующую ошибку.
Fatal error: Uncaught Error:
Call to undefined method Defuse\Crypto\Crypto::CreateNewRandomKey() in /var/www/encryptTest.php:12
Stack trace: #0 {main} thrown in /var/www/encryptTest.php on line 12
Я использовал один из примеров сценариев
$key = \Defuse\Crypto\Crypto::CreateNewRandomKey();
$message = 'We are all living in a yellow submarine';
$ciphertext = \Defuse\Crypto\Crypto::Encrypt($message, $key);
$plaintext = \Defuse\Crypto\Crypto::Decrypt($ciphertext, $key);
echo "cipher is $ciphertext<br/> plaintext is $plaintext";
Я также пытался использовать
$key = Crypto::CreateNewRandomKey();
и т.д., без более полного пути, и я попытался
use Defuse\Crypto\Crypto;
Я получаю то же сообщение об ошибке. Кажется, это простая проблема путей к каталогам, но вещи .phar за мной! Я был бы очень благодарен, если бы кто-то мог подтолкнуть меня в правильном направлении. Я не использую композитор, и я действительно не хочу. Благодарю.
После дополнительных испытаний я нашел ответ, было три ошибки, вот рабочий код. Среди прочего, в руководстве по документации (tutorial.md) пропущена строка require_once (/…phar) в примерах учебника, что вводило меня в заблуждение. Сценарий может быть размещен в корневом веб-каталоге или любом подкаталоге, классы пространства имен по-прежнему будут вызываться правильно. Так и здесь.
<?php
use Defuse\Crypto\Key;
use Defuse\Crypto\Crypto;
require_once "{$_SERVER['DOCUMENT_ROOT']}/defuse/defuse-crypto.phar";
$key = Key::CreateNewRandomKey();
$message = 'StackOverflow is great';
$ciphertext = Crypto::Encrypt($message, $key);
$plaintext = Crypto::Decrypt($ciphertext, $key);
echo "cipher is $ciphertext<br/> plaintext is $plaintext";
?>
Вам нужно будет добавить
use Defuse\Crypto\KeyProtectedByPassword;
если вы хотите использовать сохраненный и защищенный паролем ключ, и
use Defuse\Crypto\File;
если вы хотите зашифровать файлы. Авторы предлагают поместить файл .phar в / var / www / lib, но я поместил его в / var / www / defuse вместе с исходными файлами, которые находятся в / var / www / defuse / src. Это не влияет на способ вызова пространств имен, если файл .phar правильно указан в операторе require_once ().
Других решений пока нет …