Maison  >  Article  >  développement back-end  >  Comment obtenir l'équivalence de la fonction crypt() de PHP pour CRYPT_BLOWFISH dans Go ?

Comment obtenir l'équivalence de la fonction crypt() de PHP pour CRYPT_BLOWFISH dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 15:38:29882parcourir

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

Fonction PHP crypt() équivalente dans Go

Question :

Comment créer une fonction Go pour imiter le comportement de la fonction crypt() de PHP pour des chaînes d'entrée spécifiques, où l'évaluation crypt() de PHP avec CRYPT_BLOWFISH donne la valeur true ?

Tentatives et résultat attendu :

Des tentatives ont été fait pour y parvenir, mais sans succès :

  • Tentative 1 :
    En utilisant le module github.com/nyarla/go-crypt, le résultat était faux.
  • Tentative 2 :
    La création d'une fonction de cryptage personnalisée à l'aide de l'interopérabilité C a également donné un résultat faux.
  • Tentative 3 :
    Un autre module Go a été tenté mais ne prenait pas en charge CRYPT_BLOWFISH.

Le résultat souhaité est qu'une fonction Go crypt() évalue correctement les chaînes "enter-new-password" et "$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj .8jgmtzZP2" à true, comme crypt() de PHP.

Solution :

Bien qu'un équivalent PHP crypt() exact dans Go n'ait pas pu être trouvé, une alternative La solution a été mise en œuvre :

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

Cette approche utilise le module golang.org/x/crypto/bcrypt pour comparer le mot de passe fourni avec la valeur de hachage stockée. La fonction CompareHashAndPassword() renvoie zéro si les mots de passe correspondent et une erreur dans le cas contraire.

Notes supplémentaires :

Il est important de noter que la fonction crypt de PHP propose plusieurs algorithmes de hachage, y compris sha256, sha512 et Blowfish. Dans Go, différents modules sont souvent nécessaires pour gérer des algorithmes spécifiques. Dans ce cas, le hachage de type Blowfish utilisé dans l'exemple PHP n'est pris en charge nativement par aucun des modules Go tentés. Par conséquent, le module bcrypt a été utilisé à la place.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn