今天,我将我的 phpMyAdmin 4.4.09 升级到 4.4.14,在我的 Red Hat Enterprise Linux Server 版本 6.7(圣地亚哥)和 PHP 版本 5.3.3 上。我的数据库服务器是 MariaDB 5.5.44。我已将之前安装的 config.inc.php 文件复制到新解压的文件中。当我登录时,我收到此警告消息:
Warning in ./libraries/phpseclib/Crypt/Base.php#967
openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended
Backtrace
./libraries/phpseclib/Crypt/Base.php#967: openssl_encrypt(
string ' g8��)@�� �8��',
string 'aes-256-ecb',
string '52627967f3d249d378f33d2b9b1681e7',
boolean true,
)
./libraries/plugins/auth/AuthenticationCookie.class.php#810: phpseclib\Crypt\Base->decrypt(string 'w(� �9P���(��')
./libraries/plugins/auth/AuthenticationCookie.class.php#458: AuthenticationCookie->cookieDecrypt(
string 'GncowgnLOVDc0h3HKLkC4g==',
string '52627967f3d249d378f33d2b9b1681e7',
)
./libraries/common.inc.php#869: AuthenticationCookie->authCheck()
./index.php#12: require_once(./libraries/common.inc.php
-
Warning in ./libraries/phpseclib/Crypt/Base.php#967
openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended
Backtrace
./libraries/phpseclib/Crypt/Base.php#967: openssl_encrypt(
string '�만�"Na#���` �~',
string 'aes-256-ecb',
string '2}�)6�k4�yK�вQq1jՁ1��o<6H<�>���N��Lj9�i�$�B\'���c�;kc�C���\'�S���� %yخ�3�s ��c?5�� ��{ϓ~�2��j,��Ϗr�BxF�]���\\�[��#���H�IR\\/cA:W�,E��6U -���Y�oz� ��@���;5F�8��9]�ݧ��2]�B����Dy��4Nv]5>���3��Su5}���4 ���<3�]}_���,� `hG',
boolean true,
)
./libraries/plugins/auth/AuthenticationCookie.class.php#810: phpseclib\Crypt\Base->decrypt(string '�����2^q3���p�n')
./libraries/plugins/auth/AuthenticationCookie.class.php#492: AuthenticationCookie->cookieDecrypt(
string 'n/u3nKcyXnEzof2TcBmqbg==',
string '2}�)6�k4�yK�вQq1jՁ1��o<6H<�>���N��Lj9�i�$�B\'���c�;kc�C���\'�S���� %yخ�3�s ��c?5�� ��{ϓ~�2��j,��Ϗr�BxF�]���\\�[��#���H�IR\\/cA:W�,E��6U -���Y�oz� ��@���;5F�8��9]�ݧ��2]�B����Dy��4Nv]5>���3��Su5}���4 ���<3�]}_���,� `hG',
)
./libraries/common.inc.php#869: AuthenticationCookie->authCheck()
./index.php#12: require_once(./libraries/common.inc.php)
-
Warning in ./libraries/Response.class.php#370
json_encode(): Invalid UTF-8 sequence in argument
Backtrace
./libraries/Response.class.php#370: json_encode(array)
./libraries/Response.class.php#388: PMA_Response->_ajaxResponse()
PMA_Response::response()
你能帮帮我吗?谢谢
最佳答案
这是一个 PHP 5.3.3 错误。
我能够在 PHP 5.3.3 上重现这个问题:
openssl_encrypt(str_repeat('.', 16), 'aes-256-ecb', str_repeat('a', 32), true);
这给了我一个“警告:openssl_encrypt():使用空的初始化向量 (iv) 可能不安全,不推荐
”
有趣的是,ECB 模式不使用 IV。无论如何,我尝试添加一个,因此:
openssl_encrypt(str_repeat('.', 16), 'aes-256-ecb', str_repeat('a', 32), true, str_repeat('.', 16));
这给了我一个“警告:openssl_encrypt():传递的 IV 长 16 个字节,比所选密码预期的 0 长,截断
”。
因此,无论您做什么,在 PHP 5.3.3 中使用 ECB 模式时都会出现错误。我什至尝试将最后一个参数设置为 ''
并得到关于使用空 IV 的第一个错误。
这在 PHP 5.3.27 中不是问题。
我不会强制使用 PHP 5.3.* 的每个版本来查看此问题何时得到修复,但是...我的猜测是它已在 5.3.7 中通过以下更改日志条目得到修复:
“openssl_encrypt()/openssl_decrypt() 将可变长度密码的 key 截断为算法的 OpenSSL 默认值。(Scott)”
那是关于 key 而不是 IV,但它仍然是我在他们的 5.3.* 系列更新日志中找到的最接近的条目。
我的建议:在 phpseclib 中进行查找替换。查找所有 openssl_encrypt
行并将它们替换为 @openssl_encrypt
。
实际上,您只需要为 ECB 模式执行此操作,但我给您的说明更简单。可能还需要为 openssl_decrypt
做同样的事情。也许 phpseclib 也应该这样做,但我认为 idk...错误抑制运算符通常不受欢迎,事实上 PHP 5.3.3 也是如此。
关于php - ./libraries/phpseclib/Crypt/Base.php#967 中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32349895/