我想使用 Argon2i 来散列我的密码,但它不起作用。我收到以下错误:
Fatal error: Uncaught Error: Call to undefined function Sodium\crypto_pwhash_str()
这是我用来安装 libsodium 的指南: https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium
我已检查 libsodium 是否已安装并正常工作。
我实现了从以下链接获得的 Argon2i 哈希:https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016
这是来自该链接的代码:
// Password hashing:
$hash_str = \Sodium\crypto_pwhash_str(
$password,
\Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
\Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
可能是什么问题?
最佳答案
导致此问题的最可能原因是 libsodium 版本过时,通常是因为 Linux 分发补丁错误地只提供 libsodium 版本 1.0.3 或 1.0.8,尽管 1.0.11 可用。
在 PHP 项目中安装 Libsodium 需要安装两个不同的东西:
libsodium
,库本身ext/libsodium
,PHP 扩展(如果这成为核心扩展,我们可能会将其缩短为ext/sodium
)
为了使用\Sodium\crypto_pwhash_str()
,必须满足两个条件:
- 编译 PHP 扩展时,您必须使用 libsodium 1.0.9 或更高版本。
- 您必须使用 ext/libsodium 1.0.3 或更高版本(针对底层库的 1.0.9 或更高版本编译)。
在岩盐中,我们有一个函数叫做 Halite::isLibsodiumSetupCorrectly()
快速诊断版本问题。
你最好的是:
- 卸载 PHP 扩展。
- 卸载 libsodium。
- 从源代码编译 libsodium 1.0.11。
- 安装 1.0.11 后重新安装 PHP 扩展。
- (推荐但可选:)要求您的操作系统提供最新版本的 libsodium,而不是因为对稳定性的错误理解而将其用户束缚在过时的版本上。
关于php - 用于 PHP 的 libsodium 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684596/