Aller au contenu

Calculer une somme de contrôle#

Problème#

Je voudrais calculer la somme de contrôle (sha256 par exemple) d'un string.

Je voudrais également que le résultat soit sous forme de string (et non []byte).

Solution#

import (
        "encoding/base64"
        "encoding/hex"
        "crypto/sha256"
)


contenu: "le contenu dont on veut calculer la somme de contrôle"

somme64: base64.Encode(null, sha256.Sum256(contenu))
sommehex: hex.Encode(sha256.Sum256(contenu))
sommestring: "\(sha256.Sum256(contenu))"

Résultat :

➜ cue export
{
    "contenu": "le contenu dont on veut calculer la somme de contrôle",
    "somme64": "4OS19gO+cliMGvaaI1uBiJP5ke7w4OG3kG5cUVkEYU4=",
    "sommehex": "e0e4b5f603be72588c1af69a235b818893f991eef0e0e1b7906e5c515904614e"
    "sommestring": "<des caractères spéciaux>"
}

Discussion#

En ligne de commande, l'outil sha256sum permet de renvoyer un résultat sous forme texte (par défaut) ou binaire. Aussi, nous nous attendons à un résultat sous forme string de sha256.Sum256(). Cependant, cette fonction renvoie du binaire []byte qu'il va falloir convertir dans le format attendu.

La conversion en string peut s'effectuer directement par une interpolation. Cependant, le résultat n'est pas celui souhaité car il contient des caractères spéciaux. Il est alors temps de comprendre ce que nous sommes en train de faire.

La fonction Sha256 renvoie un résultat binaire de 256 bits. C'est donc un résultat binaire. Toute méthode de conversion en string hormis l'interpolation est alors acceptable. En particulier, encoder le résultat binaire en Base64 ou en hexadécimal est une façon simple de faire.

Enfin, signalons que d'autres fonctions sont disponibles sur https://pkg.go.dev/cuelang.org/go/pkg/crypto.

Note

Pour obtenir le même résultat que la commande shell sha256sum, il faut utiliser hex.Encode(). Cependant, echo "le contenu dont on veut calculer la somme de contrôle" | sha256sum ne donnera pas le résultat escompté. La raison est que echo ajoute un caractère de retour à la ligne. Il faut exécuter echo -n :

➜ echo -n "le contenu dont on veut calculer la somme de contrôle" | sha256sum 
e0e4b5f603be72588c1af69a235b818893f991eef0e0e1b7906e5c515904614e  -