Maison >développement back-end >Golang >Comment hacher en toute sécurité des mots de passe dans Golang/App Engine sans appel système ni scrypt ?

Comment hacher en toute sécurité des mots de passe dans Golang/App Engine sans appel système ni scrypt ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 08:26:02659parcourir

How to Securely Hash Passwords in Golang/App Engine Without syscall or scrypt?

Hachage sécurisé des mots de passe dans Golang/App Engine sans appel système ni scrypt

Bien que bcrypt et scrypt soient couramment utilisés pour le hachage de mots de passe, ils peuvent ne pas l'être adapté à App Engine en raison de l'accessibilité des appels système. Comme alternative, envisagez d'utiliser la bibliothèque go.crypto pour un hachage sécurisé des mots de passe.

Le package go.crypto offre la prise en charge de pbkdf2 et de bcrypt. Les deux implémentations sont entièrement écrites en Go, garantissant la compatibilité avec App Engine.

1. Utilisation de bcrypt

Implémentez bcrypt en suivant les étapes suivantes :

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

Exemple d'utilisation :

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

func clear(b []byte) {
    for i := 0; i < len(b); i++ {
        b[i] = 0;
    }
}

func Crypt(password []byte) ([]byte, error) {
    defer clear(password)
    return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
}

ctext, err := Crypt(pass)

if err != nil {
    log.Fatal(err)
}

fmt.Println(string(ctext))</code>

Cela produira un résultat similaire à :

a$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e

2. Utilisation de pbkdf2

Pour un hachage simple utilisant pbkdf2 :

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

func HashPassword(password, salt []byte) []byte {
    defer clear(password)
    return pbkdf2.Key(password, salt, 4096, sha256.Size, sha256.New)
}

pass := []byte("foo")
salt := []byte("bar")

fmt.Printf("%x\n", HashPassword(pass, salt))</code>

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