首頁  >  文章  >  後端開發  >  如何在 Go 中實作與 CRYPT_BLOWFISH 等價的 PHP crypt() 函數?

如何在 Go 中實作與 CRYPT_BLOWFISH 等價的 PHP crypt() 函數?

Susan Sarandon
Susan Sarandon原創
2024-10-27 15:38:29874瀏覽

 How to Achieve PHP's crypt() Function Equivalence for CRYPT_BLOWFISH in Go?

Go 中等效的PHP crypt() 函數

問題:

如何讓Go 函數模仿PHP 的函數模仿PHP 的ptPHP( ) 函數對於特定輸入字串的行為,其中PHP 的crypt() 與CRYPT_BLOWFISH 評估結果為true?

嘗試與預期結果:

嘗試嘗試實現此目的,但沒有成功:

  • 嘗試1:
    使用github.com/nyarla/go-crypt 模組,結果為false。
  • 嘗試 2:
    使用 C 互通建立自訂 crypt 函數也會導致錯誤。
  • 嘗試 3:
    另一個 Go 模組已嘗試,但缺乏對 CRYPT_BLOWFISH 的支援。

期望的結果是Go crypt() 函數正確評估字串「enter-new-password」和「$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnnF/.GvPpulwemi​​p. ()。

解決方案:

雖然在Go 中找不到確切的PHP crypt() 等效項,但可以找到替代方案解決方案已實施:

<code class="go">import "golang.org/x/crypto/bcrypt"

check := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"), []byte("enter-new-password"))

if check == nil {
    fmt.Println("Passwords match")
} else {
    fmt.Println("Passwords don't match")
}</code>

此方法利用golang.org/x/crypto/bcrypt 模組將提供的密碼與儲存的雜湊值進行比較。如果密碼匹配,CompareHashAndPassword() 函數將傳回 nil,否則傳回錯誤。

附加說明:

需要注意的是,PHP 的 crypt 函數提供了多種雜湊演算法,包括 sha256、sha512 和河豚。在 Go 中,通常需要不同的模組來處理特定的演算法。在這種情況下,任何嘗試的 Go 模組本身都不支援 PHP 範例中使用的河豚類型雜湊。因此,改用了 bcrypt 模組。

以上是如何在 Go 中實作與 CRYPT_BLOWFISH 等價的 PHP crypt() 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn