bcrypt in Go: Anleitung, Beispiele & Installation

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

bcrypt in Go: Die vollständige Anleitung zum Passwort-Hashing

Die Sicherheit von Benutzerdaten ist eine der zentralen Aufgaben der modernen Webentwicklung. Passwörter im Klartext zu speichern ist inakzeptabel, und einfaches Hashing mit MD5 oder SHA-1 gilt aufgrund der Anfälligkeit für Brute-Force-Angriffe längst als unsicher. Die Bibliothek bcrypt für Go bietet einen bewährten und zuverlässigen Algorithmus für adaptives Passwort-Hashing, der sowohl gegen Wörterbuchangriffe als auch gegen Rainbow-Table-Angriffe resistent ist.

Der bcrypt-Algorithmus wurde 1999 von Niels Provos und David Mazières auf Basis der Blowfish-Chiffre entwickelt. Seine entscheidende Eigenschaft ist die adaptive Komplexität: Sie können die Anzahl der Hashing-Iterationen erhöhen, wodurch das Erraten von Passwörtern mit steigender Rechenleistung immer aufwändiger wird. In der Go-Ökosystem ist die Standardbibliothek golang.org/x/crypto/bcrypt die offizielle Erweiterung und wird vom Go-Entwicklerteam unterstützt.

In diesem Artikel gehen wir detailliert auf alle Aspekte der Arbeit mit bcrypt in Go ein: von der Installation und grundlegenden Nutzung bis hin zu fortgeschrittenen Techniken und typischen Fehlern. Sie erfahren, wie Sie Passwörter korrekt hashen, mit Hashes vergleichen, die optimale Kostenstufe (Cost) wählen und bcrypt in reale Anwendungen integrieren.

Installation

Die bcrypt-Bibliothek für Go ist nicht Teil der Standardbibliothek, aber ein Bestandteil des offiziellen Untermoduls x/crypto. Die Installation erfolgt mit einem einzigen Befehl:

go get golang.org/x/crypto/bcrypt

Nach Ausführung dieses Befehls erscheint die Abhängigkeit in Ihrer go.mod-Datei, und Sie können das Paket in Ihren Code importieren:

import "golang.org/x/crypto/bcrypt"

Stellen Sie sicher, dass Sie Go Version 1.13 oder höher installiert haben (empfohlen wird 1.21+). Wenn Sie Module verwenden (was 2024 Standard ist), wird die Abhängigkeit automatisch nachgeladen.

Schnellstart: Minimales Arbeitsbeispiel

Beginnen wir mit dem einfachsten Beispiel: Passwort-Hashing und -Verifikation. Dies ist die Grundlage, die Sie in jedem Projekt verwenden werden.

package main

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

func main() {
    // Ursprüngliches Benutzerpasswort
    password := []byte("mySecretPassword123!")

    // Passwort mit Standardkosten (10) hashen
    hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Passwort-Hash: %s\n", hashedPassword)

    // Korrektes Passwort überprüfen
    err = bcrypt.CompareHashAndPassword(hashedPassword, password)
    if err != nil {
        fmt.Println("Passwort stimmt nicht überein!")
    } else {
        fmt.Println("✓ Passwort stimmt überein!")
    }

    // Falsches Passwort überprüfen
    wrongPassword := []byte("wrongPassword")
    err = bcrypt.CompareHashAndPassword(hashedPassword, wrongPassword)
    if err != nil {
        fmt.Println("✗ Passwort stimmt nicht überein (wie erwartet)")
    }
}

Dieser Code macht drei Dinge: Er generiert einen Hash, überprüft das korrekte Passwort und stellt sicher, dass ein falsches Passwort abgelehnt wird. Beachten Sie: GenerateFromPassword generiert automatisch ein zufälliges Salt und bettet es in den Hash ein, sodass Sie jedes Mal unterschiedliche Hashes für dasselbe Passwort erhalten.

Wichtige Methoden und Funktionen

Das Paket bcrypt bietet eine kleine, aber durchdachte API. Sehen wir uns alle wichtigen Funktionen mit Beispielen an.

1. GenerateFromPassword

Signatur: func GenerateFromPassword(password []byte, cost int) ([]byte, error)

Beschreibung: Die Hauptfunktion zum Hashing von Passwörtern. Sie nimmt das Passwort als Byte-Slice und die Kostenstufe (Cost) entgegen – ein logarithmischer Wert für die Anzahl der Iterationen. Sie gibt den Hash im Standard-bcrypt-Format zurück (enthält Salt und Kosten).

Empfehlungen