Heim > Backend-Entwicklung > Golang > Gibt es ein echtes Go-Äquivalent zur crypt()-Funktion von PHP?

Gibt es ein echtes Go-Äquivalent zur crypt()-Funktion von PHP?

Linda Hamilton
Freigeben: 2024-10-29 05:10:31
Original
302 Leute haben es durchsucht

Is There a True Go Equivalent to PHP's crypt() Function?

Ein Go-Äquivalent für die crypt()-Funktion von PHP finden

Crypt-Funktion in PHP und Golang

Problemeinführung

Die PHP-Funktion crypt() generiert mithilfe eines angegebenen Algorithmus einen Hashwert einer bestimmten Zeichenfolge. Kürzlich stellte sich die Frage nach einem Golang-Äquivalent dieser Funktion, das identische Ergebnisse für bestimmte Eingabe- und Hashwerte liefern würde.

Fehlgeschlagene Versuche

Es wurden mehrere Versuche unternommen, die zu implementieren Go-Äquivalent zur crypt()-Funktion von PHP:

  • Versuch 1:Das Go-Crypt-Modul hat nicht das gleiche Ergebnis erzeugt.
  • Versuch 2 : Das Definieren einer benutzerdefinierten Verschlüsselungsfunktion mithilfe der C-Interoperabilität ist ebenfalls fehlgeschlagen.
  • Versuch 3: Das bcrypt-Paket unterstützte den von PHP5.3 und früheren Versionen verwendeten CRYPT_BLOWFISH-Algorithmus nicht.

Lösung

Obwohl kein genaues Äquivalent zur „Go-Crypt-Funktion“ gefunden wurde, wurde eine Alternative entdeckt:

  • Verwendung von golang.org/x/crypto/bcrypt-Paket kann die Funktion bcrypt.CompareHashAndPassword() verwendet werden, um ein Klartext-Passwort mit einem Hash-Wert zu vergleichen.

Beispiel

Der folgende Go-Code kann verwendet werden:

<code class="go">import "golang.org/x/crypto/bcrypt"

check := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"), []byte("enter-new-password"))
log.Println(check)</code>
Nach dem Login kopieren

Dieser Code gibt Null zurück, wenn die bcrypt-Version von „enter-new-password“ mit dem bereitgestellten Hashwert übereinstimmt; andernfalls wird ein Fehler zurückgegeben.

Zusätzliche Hinweise

  • PHPs crypt()-Funktion unterstützt verschiedene Hashing-Algorithmen, einschließlich sha256, sha512, blowfish usw.
  • In Go ist es notwendig, den Hash-Typ und die Kosten explizit anzugeben, wenn das bcrypt-Paket verwendet wird.
  • Für das spezifische Szenario in der Frage ist die Existenz von $2a$ als Präfix in Der Hash-Wert deutete auf die Verwendung eines Blowfish-Hashs hin.

Das obige ist der detaillierte Inhalt vonGibt es ein echtes Go-Äquivalent zur crypt()-Funktion von PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage