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