Quelqu'un peut-il me montrer un exemple de travail pour générer un SHA hachage d'une chaîne que j'ai, disons myPassword := "beautiful"
, en utilisant Go 1?
Les pages de documentation manquent d'exemples et je n'ai trouvé aucun code de travail sur Google.
Un exemple :
import (
"crypto/sha1"
"encoding/base64"
)
func (ms *MapServer) storee(bv []byte) {
hasher := sha1.New()
hasher.Write(bv)
sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
...
}
Dans cet exemple, je crée un sha à partir d'un tableau d'octets. Vous pouvez obtenir le tableau d'octets en utilisant
bv := []byte(myPassword)
Bien sûr, vous n'avez pas besoin de le coder en base64 si vous n'êtes pas obligé: vous pouvez utiliser le tableau d'octets bruts renvoyé par la fonction Sum.
Il semble y avoir une petite confusion dans les commentaires ci-dessous. Clarifions donc pour les prochains utilisateurs les meilleures pratiques en matière de conversion en chaînes:
Go By Example a une page sur le hachage sha1.
package main
import (
"fmt"
"crypto/sha1"
"encoding/hex"
)
func main() {
s := "sha1 this string"
h := sha1.New()
h.Write([]byte(s))
sha1_hash := hex.EncodeToString(h.Sum(nil))
fmt.Println(s, sha1_hash)
}
Vous pouvez exécutez cet exemple sur play.golang.org
La documentation du paquet sur http://golang.org/pkg/crypto/sha1/ a un exemple qui le démontre. Il est indiqué comme un exemple de la fonction Nouveau, mais c'est le seul exemple sur la page et il a un lien juste en haut de la page, donc ça vaut le coup de le regarder. L'exemple complet est,
Code:
h := sha1.New()
io.WriteString(h, "His money is twice tainted: 'taint yours and 'taint mine.")
fmt.Printf("% x", h.Sum(nil))
Sortie:
59 7f 6a 54 00 10 f9 4c 15 d7 18 06 a9 9a 2c 87 10 e7 47 bd
Vous pouvez réellement le faire de manière beaucoup plus concise et idiomatique:
// Assuming 'r' is set to some inbound net/http request
form_value := []byte(r.PostFormValue("login_password"))
sha1_hash := fmt.Sprintf("%x", sha1.Sum(form_value))
// Then output optionally, to test
fmt.Println(sha1_hash)
Dans cet exemple trivial d'un http.Request POST contenant un champ login_password, il convient de noter que fmt.Sprintf () appelé avec %x
A converti la valeur de hachage en hexadécimal sans avoir à inclure une déclaration import "encoding/hex"
.
(Nous avons utilisé fmt.Sprintf () par opposition à fmt.Printf () car nous sortions une chaîne dans une affectation de variable, pas un io.Writer interface.)
Il convient également de noter que la fonction sha1.Sum () instancie verbalement de la même manière que la définition sha1.New () :
func New() hash.Hash {
d := new(digest)
d.Reset()
return d
}
func Sum(data []byte) [Size]byte {
var d digest
d.Reset()
d.Write(data)
return d.checkSum()
}
Cela est vrai (au moins au moment de la publication) pour les variantes de la bibliothèque Sha dans l'ensemble de cryptographie standard de Golang, telles que Sha512 .
Enfin, si on le voulait, ils pourraient suivre l'implémentation [to] String () de Golang avec quelque chose comme func (h hash.Hash) String() string {...}
pour encapsuler le processus.
Cela dépasse très probablement la portée souhaitée de la question initiale.
Voici quelques bons exemples:
Le deuxième exemple cible sha256, pour faire sha1 hexadécimal, vous feriez:
// Calculate the hexadecimal HMAC SHA1 of requestDate using sKey
key := []byte(c.SKey)
h := hmac.New(sha1.New, key)
h.Write([]byte(requestDate))
hmacString := hex.EncodeToString(h.Sum(nil))
(depuis https://github.com/soniah/dnsmadeeasy )
h := sha1.New()
h.Write(content)
sha := h.Sum(nil) // "sha" is uint8 type, encoded in base16
shaStr := hex.EncodeToString(sha) // String representation
fmt.Printf("%x\n", sha)
fmt.Println(shaStr)
// Get sha1 from string
func Hashstr(Txt string) string {
h := sha1.New()
h.Write([]byte(Txt))
bs := h.Sum(nil)
sh:= string(fmt.Sprintf("%x\n", bs))
return sh
}
Voici une fonction que vous pouvez utiliser pour générer un hachage SHA1:
// SHA1 hashes using sha1 algorithm
func SHA1(text string) string {
algorithm := sha1.New()
algorithm.Write([]byte(text))
return hex.EncodeToString(algorithm.Sum(nil))
}
J'ai rassemblé un groupe de ces fonctions de hachage utilitaires ici: https://github.com/shomali11/util
Tu trouveras FNV32
, FNV32a
, FNV64
, FNV65a
, MD5
, SHA1
, SHA256
et SHA512