Heim >Backend-Entwicklung >Golang >Wie kann ich die Kompatibilität zwischen Bcrypt von Node.js und Bcrypt von Golang für das Passwort-Hashing sicherstellen?

Wie kann ich die Kompatibilität zwischen Bcrypt von Node.js und Bcrypt von Golang für das Passwort-Hashing sicherstellen?

DDD
DDDOriginal
2024-12-06 06:09:15992Durchsuche

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

Hashing von Passwörtern in Golang, kompatibel mit Bcrypt von Node.js

In Node.js wird häufig ein Bcrypt-Paket zum Hashen von Benutzerpasswörtern verwendet. Bei der Migration zu Golang ist es wichtig, die Kompatibilität mit den vorhandenen gehashten Passwörtern, die in der Datenbank gespeichert sind, aufrechtzuerhalten.

Node.js Bcrypt-Hashing-Code

Der bereitgestellte Node.js-Code nutzt das bcrypt-Modul, um eine Hash-Zeichenfolge zu generieren. Es nutzt zwei aufeinanderfolgende Funktionen: genSalt zum Erstellen eines Salts und Hash zum Generieren des Hashs mithilfe des Passworts und des Salts.

Golang Bcrypt Hashing-Äquivalent

Die entsprechende Golang-Implementierung mit Das Paket golang.org/x/crypto/bcrypt würde wie folgt aussehen:

hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost);

Funktioniert Beispiel

Um die Kompatibilität zu demonstrieren, veranschaulicht das folgende Codebeispiel das Hashing eines Passworts in Golang und dessen Überprüfung anhand des von Node.js generierten Hashs:

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.")
    }
}

Verwendung

Um diesen Code zu verwenden, stellen Sie zunächst sicher, dass Sie das erforderliche Golang-Paket installiert und importiert haben, wie im Beispiel gezeigt. Übergeben Sie dann einfach Ihr Passwort an GenerateFromPassword, um eine Hash-Zeichenfolge zu generieren. Verwenden Sie zur Passwortvalidierung CompareHashAndPassword, um das gehashte Passwort aus der Datenbank mit dem bereitgestellten Passwort zu vergleichen. Wenn der zurückgegebene Fehler Null ist, stimmen die Passwörter überein und entsprechen sowohl den Node.js- als auch den Golang-Standards.

Das obige ist der detaillierte Inhalt vonWie kann ich die Kompatibilität zwischen Bcrypt von Node.js und Bcrypt von Golang für das Passwort-Hashing sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn