Le Go par l'exemple: Empreinte SHA1

Les empreintes SHA1 sont fréquemment utilisées pour calculer de courtes chaines permettant d’identifier des chaines ou des gros objets binaires. Par exemple, le système de gestion de version git system utilise SHA1 pour identifier les fichiers et répertoires versionnés. Voici comment calculer des empreintes SHA1 en Go.

package main

Go implémente plusieurs fonctions de hachage dans plusieurs packages crypto/*.

import "crypto/sha1"
import "fmt"
func main() {
    s := "sha1 this string"

Le modèle pour générer une empreinte, c’est sha1.New(), sha1.Write(bytes), puis sha1.Sum([]byte{}). Ici, on commence avec un nouveau hachage.

    h := sha1.New()

Write attend un tableau d’octets (bytes). Si vous avez une chaîne, utilisez []byte(s) pour forcer le type.

    h.Write([]byte(s))

Ceci récupère le résultat du hachage dans une slice d’octets. L’argument à Sum peut être ajouté pour faire l’ajouter à une slice d’octets existante. En général, ce n’est pas nécessaire.

    bs := h.Sum(nil)

On affiche souvent les valeurs SHA-1 en hexadécimal, par exemple pour les commits Git. Utilisez le formattage avec %x pour convertir un résultat de hachage sous forme de chaîne héxadécimale.

    fmt.Println(s)
    fmt.Printf("%x\n", bs)
}

Lancer le programme calcule l’empreinte et l’affiche de manière lisible en hexadécimal.

$ go run sha1-hashes.go
sha1 this string
cf23df2207d99a74fbe169e3eba035e633b65d94

Vous pouvez calculer des empreintes de la même manière qu’ici avec d’autres méthodes de hachage. Par exemple, pour utiliser MD5, il faut importer crypto/md5 et utiliser md5.New().

Si vous avez besoin d’empreintes sûre pour de la cryptographie, vous devriez vous renseigner au sujet de la force des différentes algorithmes!

Exemple suivant: Encodage Base64.