Aller au contenu

Coder et décoder en Base64#

Problème#

Je voudrais encoder une string en base64.

Ou inversement, je voudrais décoder une string déjà en base64 et convertir le résultat en string.

Solution#

Encoder#

import (
        "encoding/base64"
)

secretEnClair:   "Secr3t"
secret:          base64.Encode(null, secretEnClair)

Résultat :

➜ cue export
{
    "secretEnClair": "Secr3t",
    "secret": "U2VjcjN0"
}

Décoder#

import (
        "encoding/base64"
)

secret: "U2VjcjN0"
secretEnClair: "\(base64.Decode(null, secret))"

Résultat :

{
    "secret": "U2VjcjN0",
    "secretEnClair": "Secr3t"
}

Discussion#

L'encodage en base64 est facile. Il faut utiliser base64.Encode(). Comme indiqué dans la documentation, le premier argument est forcément null.

Le décodage depuis base64 pose plusieurs problèmes.

  • le résultat est en []byte. Lors d'un cue export au format JSON ou autre, Cue convertit les []byte en base64. On a donc un réencodage inattendu et non souhaité. Cela peut même donner l'impression qu'il ne s'est rien passé.
  • le résultat est en []byte alors que nous souhaitons un string. Il ne semble pas exister de fonction de conversion. Il faut donc utiliser l'interpolation qui se charge de cette conversion.
  • comme pour l'encodage, la fonction base64.Decode() prend deux arguments dont le premier est également null (cf la documentation)