php - ./libraries/phpseclib/Crypt/Base.php#967 中的警告

标签 php phpmyadmin phpseclib

今天,我将我的 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/

相关文章:

php - 从 JavaScript 表单提交运行 PHP

PHPSECLIB 和 SSH2

java - 为什么我尝试用 java 解密 RSA 但用 php 加密时会出现此异常?

php - 加密会破坏 MySQL 查询吗?

php - 拦截标准输出/传递应用程序输出(Shell/C/PHP)

php - 如何使用此分页代码获取页面上的项目数?

PHP 将一个数组的索引分配给另一个数组

php - 我的注册表不会将信息发送到我的数据库。

mysql - phpmyadmin 的连接 URL

phpmyadmin - 如何在 PHPMyAdmin 4+ 中取消隐藏隐藏表?