2016-11-18 133 views
2

我想使用Argon2i來哈希我的密碼,但它不起作用。我得到以下錯誤:PHP的libsodium無法正常工作

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 
); 

可能是什麼問題呢?

回答

3

這個問題最可能的原因是libsodium的過時版本,通常是因爲儘管1.0.11可用,但Linux分發補丁錯誤地只提供libsodium版本1.0.3或1.0.8。

在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中,我們有一個名爲Halite::isLibsodiumSetupCorrectly()的功能來快速診斷版本問題。

你最好的最好的是:

  1. 卸載PHP擴展。
  2. 卸載libsodium。
  3. 從源代碼編譯libsodium 1.0.11。
  4. 安裝1.0.11後重新安裝PHP擴展。
  5. (推薦但是可選的:)要求您的操作系統提供最新版本的libsodium,而不是因爲對穩定性有缺陷的理解而將用戶sha到過時的版本。
+0

謝謝!我很困惑。我支持一切,並開始新鮮的,我的服務器上沒有安裝libsodium。我如何從源代碼編譯libsodium 1.0.11?我在網站上看到一個tarball文件。我該怎麼辦?我正在運行Ubuntu 16.對不起,這還是很新的。 – baileyJchoi

+1

請參閱https://paragonie.com/book/pecl-libsodium/read/00-intro。md#安裝 - libsodium-source需要步驟 –

+0

作品,謝謝!!! – baileyJchoi