Travis ci travisci:php7.2don';不支持Argon2i
我与Travis CI的项目中有一个错误: 不支持Argon2i算法。请安装LibNaude扩展Travis ci travisci:php7.2don';不支持Argon2i,travis-ci,Travis Ci,我与Travis CI的项目中有一个错误: 不支持Argon2i算法。请安装LibNaude扩展 或者升级到PHP7.2+ 但是,PHP 7.2版本中存在Argon2i,Travis CI安装PHP 7.2版本: $ phpenv global 7.2 2>/dev/null 7.2 is not pre-installed; installing Downloading archive: https://s3.amazonaws.com/travis-php-archives/bina
或者升级到PHP7.2+ 但是,PHP 7.2版本中存在Argon2i,Travis CI安装PHP 7.2版本:
$ phpenv global 7.2 2>/dev/null
7.2 is not pre-installed; installing
Downloading archive: https://s3.amazonaws.com/travis-php-archives/binaries/ubuntu/14.04/x86_64/php-7.2.tar.bz2
$ curl -s -o archive.tar.bz2 $archive_url && tar xjf archive.tar.bz2 --directory /
$ phpenv global 7.2
$ php --version
PHP 7.2.0 (cli) (built: Dec 2 2017 17:12:55) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.2.0, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans
有人有主意吗?我最近在一个Symfony 4项目中遇到了同样的问题,并在Travis的Github上发布了一条消息 然而,问题似乎不是来自Travis,而是来自PHP7.2默认构建本身 引用我自己的话: 我在本地使用了一个预配置的PHP,所以我只是从源代码中编译了PHP7.2
$ ./php -v
PHP 7.2.0 (cli) (built: Dec 6 2017 15:26:29) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
然后我尝试使用ARGON2I
算法,如官方文件中所述:
虽然对BCRYPT
没有任何问题:
$ ./php -r 'echo password_hash("test", PASSWORD_BCRYPT) . "\n";'
$2y$10$wsWe3BhyzenVqDs6JV/fPOB0XKh0oTuGdrgLp61MnUPzOUdw4jZey
这很奇怪。我希望这个算法是默认PHP7.2构建的一部分,就像其他哈希算法一样。文件中似乎没有任何相反的指示。我会调查的。也许我理解错了。。。但对我来说这看起来像个bug,因为他们说PASSWORD\u ARGON2I
是PHP核心的一部分
编辑:
鉴于此,7.2似乎确实没有在其默认版本中实现
PASSWORD\u AGRON2I
算法。PHP必须使用选项-with-password-argon2
进行编译,如中所述。我最近在一个Symfony 4项目中遇到了同样的问题,并在Travis的Github上发布了一条消息
然而,问题似乎不是来自Travis,而是来自PHP7.2默认构建本身
引用我自己的话:
我在本地使用了一个预配置的PHP,所以我只是从源代码中编译了PHP7.2
$ ./php -v
PHP 7.2.0 (cli) (built: Dec 6 2017 15:26:29) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
然后我尝试使用ARGON2I
算法,如官方文件中所述:
虽然对BCRYPT
没有任何问题:
$ ./php -r 'echo password_hash("test", PASSWORD_BCRYPT) . "\n";'
$2y$10$wsWe3BhyzenVqDs6JV/fPOB0XKh0oTuGdrgLp61MnUPzOUdw4jZey
这很奇怪。我希望这个算法是默认PHP7.2构建的一部分,就像其他哈希算法一样。文件中似乎没有任何相反的指示。我会调查的。也许我理解错了。。。但对我来说这看起来像个bug,因为他们说PASSWORD\u ARGON2I
是PHP核心的一部分
编辑:
鉴于此,7.2似乎确实没有在其默认版本中实现
PASSWORD\u AGRON2I
算法。PHP必须使用选项-with-password-argon2
进行编译,如中所述。PHP 7.2默认情况下似乎没有argon2i密码哈希器,这是一个编译选项,但TravisCi在其PHP图像中不使用它,然后我们可以通过添加一个库(最初在PHP<7.2版本中使用)来避免此错误,如中所述,但不是直接在composer.json中,在.travis.yml文件中调用它:
before_install:
# Fix Argon2i password hasher in TravisCi PHP version
- composer require paragonie/sodium_compat
编辑:
因为Symfony已经更新,以前的解决方案不再有效,所以我选择直接用PECL添加libnaudio扩展。我认为这种方法更好,因为我们安装并启用了PHP扩展
我们必须下载libnail库的源代码,因为ubuntu14.04没有这个库,然后编译它,用pecl编译PHP扩展,并启用它
它工作正常,但比以前的解决方案需要更多的时间
before_install:
# Manually compile the libsodium library
- sudo apt-get update -qq
- sudo apt-get install build-essential git -y
- git clone -b stable https://github.com/jedisct1/libsodium.git
- cd libsodium && sudo ./configure && sudo make check && sudo make install && cd ..
- '[[ "$TRAVIS_PHP_VERSION" == "nightly" ]] || phpenv config-rm xdebug.ini'
- composer self-update
install:
# Manually install libsodium, because the TravicCi image doesn't provide PHP7.2 with libsodium
- pecl install libsodium
- echo "extension=sodium.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
默认情况下,PHP 7.2似乎没有argon2i密码哈希器,这是一个编译选项,但TravisCi在其PHP图像中不使用它,那么我们可以通过添加一个库(最初在PHP<7.2版本中使用)来避免此错误,该库如中所述,但不能直接在composer.json中使用,请在.travis.yml文件中调用它:
before_install:
# Fix Argon2i password hasher in TravisCi PHP version
- composer require paragonie/sodium_compat
编辑:
因为Symfony已经更新,以前的解决方案不再有效,所以我选择直接用PECL添加libnaudio扩展。我认为这种方法更好,因为我们安装并启用了PHP扩展
我们必须下载libnail库的源代码,因为ubuntu14.04没有这个库,然后编译它,用pecl编译PHP扩展,并启用它
它工作正常,但比以前的解决方案需要更多的时间
before_install:
# Manually compile the libsodium library
- sudo apt-get update -qq
- sudo apt-get install build-essential git -y
- git clone -b stable https://github.com/jedisct1/libsodium.git
- cd libsodium && sudo ./configure && sudo make check && sudo make install && cd ..
- '[[ "$TRAVIS_PHP_VERSION" == "nightly" ]] || phpenv config-rm xdebug.ini'
- composer self-update
install:
# Manually install libsodium, because the TravicCi image doesn't provide PHP7.2 with libsodium
- pecl install libsodium
- echo "extension=sodium.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
这确实是一个愚蠢的PHP丢球。幸运的是,有一个合理的解决方法——虽然libargon2在默认情况下没有编译(因为它在PHP所属的所有平台上都不可用),但libnaude是,尽管libnaude没有提供
密码\u ARGON2I
常量,但它有,它使用Argon2密码哈希算法的Argon2id变量,它比PHP 7.2 Argon2i更强大,但与它不兼容。您可以这样使用它:
$hash = sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
您可以使用via composer在PHP7.2之前的PHP版本中获得此函数
我认为,在Symfony中,透明的回退是一个错失的机会——它最终未能以与PHP本身完全相同的方式提供实现,这对任何人都没有帮助。这确实是PHP的一个愚蠢的失误。幸运的是,有一个合理的解决方法——虽然libargon2在默认情况下没有编译(因为它在PHP所属的所有平台上都不可用),但libnaude是,尽管libnaude没有提供
密码\u ARGON2I
常量,但它有,它使用Argon2密码哈希算法的Argon2id变量,它比PHP 7.2 Argon2i更强大,但与它不兼容。您可以这样使用它:
$hash = sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
您可以使用via composer在PHP7.2之前的PHP版本中获得此函数
我认为,在Symfony中,透明回退是一个错失的机会——它最终无法以与PHP本身完全相同的方式提供实现,这对任何人都没有帮助。是的,composer做了一个测试:
argon2ipswordEncoder::isSupported()
,但返回false。我同意你的看法,我知道Argon2i在PHP核心中。。。最后,我们需要用“-with-password-argon2”编译PHP来启用它。()是,编写器执行测试:Argon2iPass