Это работает на Старый сервер, с которого он был перемещен (работает на PHP5, но не PHP8): < /p>
Код: Выделить всё
$rijndael = new Crypt_Rijndael(CRYPT_RIJNDAEL_MODE_ECB);
$rijndael->setKey('akeyof32btyeslongabcdefghijklmop');
$keylen = 256;
$rijndael->setKeyLength($keylen);
$rijndael->setBlockLength($keylen);
$decrypted1 = $rijndael->decrypt($EncryptedDataOf256bytes);
< /code>
Пробое обновление до phpseclib3 с PHP 8.2 - Данные также возвращались неузнаваемыми. < /p>
$rijndael1 = new \phpseclib3\Crypt\Rijndael('ecb');
$keylen = 256;
$rijndael->setKey('akeyof32btyeslongabcdefghijklmop');
$rijndael1->setKeyLength($keylen);
$rijndael1->setBlockLength($keylen);
$rijndael1->disablePadding(); // tried with and without padding,
$decrypted1 = $rijndael1->decrypt($bindata)
Как было предложено ниже, должен был обеспечить изолированный тест этого, потому что, как только это было сделано, было очевидно, что он имел Ничего общего с phpseclib. Это был PHP 8, который не любил назначать символы ASCII более 128 строке ключа. < /P>
Вот тест: < /p>
function hex2str($hex)
{
$str='';
for($i=0;$isetKey('akeyof32btyeslongabcdefghijklmop');
$keylen = 256;
$rijndael->setKeyLength($keylen);
$rijndael->setBlockLength($keylen);
$decrypted1 = $rijndael->decrypt($BinData);
echo "Decrypted data\n";
echo $decrypted1;
// $decrypted result
// "ThisIsATestStringOfTheDataBeingUsedWhenItIsUnencrypted123456789012345678901233456"
< /code>
Это сработало само по себе, но протестировалось с ключом, у которого были символы за пределами 0-128, он не удался, потому что в PHP5 вы можете назначить их непосредственно в виде текстовой строки. При PHP8 это не работает, и ключевая строка должна была быть построена байтом по байту. Вероятно, есть простой трюк, но PHP не моя область знаний.
Подробнее здесь: https://stackoverflow.com/questions/794 ... p5-to-php8