php - 用于 PHP 的 libsodium 无法正常工作

标签 php mysql security hash

我想使用 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 需要安装两个不同的东西:

  1. libsodium,库本身
  2. ext/libsodium,PHP 扩展(如果这成为核心扩展,我们可能会将其缩短为 ext/sodium)

为了使用\Sodium\crypto_pwhash_str(),必须满足两个条件:

  1. 编译 PHP 扩展时,您必须使用 libsodium 1.0.9 或更高版本。
  2. 您必须使用 ext/libsodium 1.0.3 或更高版本(针对底层库的 1.0.9 或更高版本编译)。

在岩盐中,我们有一个函数叫做 Halite::isLibsodiumSetupCorrectly()快速诊断版本问题。

你最好的是:

  1. 卸载 PHP 扩展。
  2. 卸载 libsodium。
  3. 从源代码编译 libsodium 1.0.11。
  4. 安装 1.0.11 后重新安装 PHP 扩展。
  5. (推荐但可选:)要求您的操作系统提供最新版本的 libsodium,而不是因为对稳定性的错误理解而将其用户束缚在过时的版本上。

关于php - 用于 PHP 的 libsodium 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684596/

相关文章:

php - 在 ubuntu 上构建 php5.3.8,得到错误 : configure: error: Unable to locate gmp. h

php - MySQL 数据库中的 TinyMCE 格式文本

php - 在不使用 SSL 的情况下防止数据包嗅探的最佳方法是什么?

php - MySQL - 在需要时添加增值税

ruby-on-rails - 如何避免 Rails 应用程序中任何地方的信用卡信息为 "saved"?

php - 如何防止 PHP 中的 SQL 注入(inject)?

security - 使用单独的 key 对进行签名和加密的目的是什么?

php - 在选择/取消选择复选框时,查询数据库,返回数组,然后更新数组而不刷新

php - 下拉菜单填充了准备好的语句

php - CodeIgniter 没有数据库?