Maison > développement back-end > Golang > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-27 15:38:29
original
883 Les gens l'ont consulté

 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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!