Heim >Backend-Entwicklung >Golang >Wie erreicht man die crypt()-Funktionsäquivalenz von PHP für CRYPT_BLOWFISH in Go?

Wie erreicht man die crypt()-Funktionsäquivalenz von PHP für CRYPT_BLOWFISH in Go?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 15:38:29974Durchsuche

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

PHP crypt()-Funktionsäquivalent in Go

Frage:

Wie kann eine Go-Funktion so gestaltet werden, dass sie die nachahmt Verhalten der crypt()-Funktion von PHP für bestimmte Eingabezeichenfolgen, wobei die crypt()-Funktion von PHP mit der CRYPT_BLOWFISH-Auswertung „true“ ergibt?

Versuche und erwartetes Ergebnis:

Versuche wurden durchgeführt gemacht, um dies zu erreichen, aber ohne Erfolg:

  • Versuch 1:
    Bei Verwendung des Moduls github.com/nyarla/go-crypt war das Ergebnis falsch.
  • Versuch 2:
    Das Erstellen einer benutzerdefinierten Kryptofunktion mit C-Interop führte ebenfalls zu einem Fehler.
  • Versuch 3:
    Ein weiteres Go-Modul wurde versucht, aber es fehlte die Unterstützung für CRYPT_BLOWFISH.

Das gewünschte Ergebnis besteht darin, dass eine Go crypt()-Funktion die Zeichenfolgen „enter-new-password“ und „$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj“ korrekt auswertet .8jgmtzZP2" auf true, wie crypt() von PHP.

Lösung:

Während ein genaues PHP-Äquivalent zu crypt() in Go nicht gefunden werden konnte, gibt es eine Alternative Lösung wurde implementiert:

<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>

Dieser Ansatz nutzt das Modul golang.org/x/crypto/bcrypt, um das bereitgestellte Passwort mit dem gespeicherten Hash-Wert zu vergleichen. Die Funktion CompareHashAndPassword() gibt Null zurück, wenn die Passwörter übereinstimmen, andernfalls einen Fehler.

Zusätzliche Hinweise:

Es ist wichtig zu beachten, dass die Kryptofunktion von PHP mehrere Hashing-Algorithmen bietet. einschließlich sha256, sha512 und blowfish. In Go sind oft unterschiedliche Module notwendig, um bestimmte Algorithmen zu handhaben. In diesem Fall wird das im PHP-Beispiel verwendete Blowfish-Hashing von keinem der versuchten Go-Module nativ unterstützt. Daher wurde stattdessen das bcrypt-Modul verwendet.

Das obige ist der detaillierte Inhalt vonWie erreicht man die crypt()-Funktionsäquivalenz von PHP für CRYPT_BLOWFISH in Go?. 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