首頁 > 後端開發 > Golang > 如何確保 Node.js 的 Bcrypt 和 Golang 的 Bcrypt 密碼哈希相容?

如何確保 Node.js 的 Bcrypt 和 Golang 的 Bcrypt 密碼哈希相容?

DDD
發布: 2024-12-06 06:09:15
原創
960 人瀏覽過

How Can I Ensure Compatibility Between Node.js's Bcrypt and Golang's Bcrypt for Password Hashing?

Golang 中的雜湊密碼與Node.js 的Bcrypt 相容

在Node.js 中,bcrypt 套件通常用於雜湊用戶密碼。遷移到 Golang 時,保持與資料庫中儲存的現有雜湊密碼的兼容性至關重要。

Node.js Bcrypt 雜湊程式碼

提供的 Node.js 程式碼利用 bcrypt 模組產生雜湊字串。它使用兩個順序函數:genSalt 創建鹽和哈希,使用密碼和鹽產生哈希。

Golang Bcrypt 雜湊等效

使用的等效 Golang 實作golang.org/x/crypto/bcrypt套件將類似於:

hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost);
登入後複製

工作範例

為了演示相容性,以下程式碼範例說明了在Golang 中對密碼進行雜湊處理並根據Node .js產生的密碼進行驗證hash:

package main

import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)

func main() {
    // Generate a hash from a password.
    password := []byte("SecretPassword")
    hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    if err != nil {
        panic(err)
    }
    fmt.Println("Generated Hash:", string(hashedPassword))

    // Simulate Node.js-generated hash.
    nodejsHash := []byte("a$n8J51m8dYIm/3CmaFCizgO93Gkj/3RZIiI4S2G8NkyL2fKvsBpfHy")

    // Compare with the Golang-generated hash.
    err = bcrypt.CompareHashAndPassword(nodejsHash, password)
    if err != nil {
        fmt.Println("Passwords do not match.")
    } else {
        fmt.Println("Passwords match.")
    }
}
登入後複製

用法

要使用此程式碼,首先確保您已安裝並匯入必要的Golang 套件,如範例所示。然後,只需將您的密碼傳遞給GenerateFromPassword即可產生雜湊字串。對於密碼驗證,請使用 CompareHashAndPassword 將資料庫中的雜湊密碼與提供的密碼進行比較。如果傳回的錯誤為 nil,則密碼匹配,符合 Node.js 和 Golang 標準。

以上是如何確保 Node.js 的 Bcrypt 和 Golang 的 Bcrypt 密碼哈希相容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板