Heim >Backend-Entwicklung >Golang >Wie erreicht man die crypt()-Funktionsäquivalenz von PHP für CRYPT_BLOWFISH 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:
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!