首頁 >後端開發 >Golang >Go 中是否存在與 PHP 的 crypt() 函數等價的函數?

Go 中是否存在與 PHP 的 crypt() 函數等價的函數?

Linda Hamilton
Linda Hamilton原創
2024-10-29 05:10:31347瀏覽

Is There a True Go Equivalent to PHP's crypt() Function?

尋找PHP 的crypt() 函數的Go 等效項

PHP 和Golang 中的Crypt 函數

問題介紹

PHP crypt() 函數使用指定的演算法產生給定字串的雜湊值。最近出現了一個問題,尋找與此函數等效的 Golang,該函數將為特定輸入和雜湊值產生相同的結果。

不成功的嘗試

進行了多次嘗試來實現Go 相當於PHP 的crypt() 函數:

  • 嘗試1: go-crypt 模組沒有產生相同的結果。
  • 嘗試 2 : 使用 C 互通性定義自訂 crypt 函數也失敗。
  • 嘗試 3: bcrypt 套件不支援 PHP5.3 及更早版本使用的 CRYPT_BLOWFISH 演算法。

儘管沒有找到確切的「Go crypt function」等效項,但發現了替代方案:

  • 使用 golang.org/x/crypto/bcrypt 套件中,bcrypt.CompareHashAndPassword() 函數可用於比較純文字密碼與雜湊值。

範例

可以使用以下Go程式碼:

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

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

如果「enter-new-password」的bcrypt版本提供與提供的雜湊值相同,則此程式碼將傳回 nil;

補充說明

  • PHP 的 crypt() 函數支援多種雜湊演算法,包括sha256、sha512、blowfish 等。
  • 在 Go 中,使用 bcrypt 套件時需要明確指定雜湊類型和成本。
  • 對於問題中的特定場景,$2a$ 作為前綴的存在雜湊值建議使用 Blowfish 類型雜湊。

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

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