Skip to main content

Chiffrement des secrets pour l’API REST

Pour créer ou mettre à jour un secret avec l’API REST, vous devez chiffrer la valeur du secret.

À propos du chiffrement des secrets

Plusieurs endpoints d’API REST vous permettent de créer des secrets sur GitHub. Pour utiliser ces points de terminaison, vous devez chiffrer la valeur secrète à l’aide de libsodium. Pour plus d’informations, consultez la documentation de libsodium.

Pour chiffrer un secret, vous avez besoin d’une clé publique codée en Base64. Vous pouvez obtenir une clé publique à partir de l’API REST. Pour déterminer le point de terminaison à utiliser pour obtenir la clé publique, consultez la documentation relative au paramètre encrypted_value du point de terminaison que vous allez utiliser pour créer un secret.

Exemple de chiffrement d’un secret à l’aide de Node.js

Si vous utilisez Node.js, vous pouvez chiffrer votre secret à l’aide de la bibliothèque libsodium-wrappers. Pour plus d’informations, consultez libsodium-wrappers.

Dans l’exemple suivant, remplacez YOUR_SECRET par la valeur de texte brut que vous voulez chiffrer. Remplacez YOUR_BASE64_KEY par votre clé publique encodée en Base64. La documentation du point de terminaison que vous allez utiliser pour créer un secret vous indique quel point de terminaison vous pouvez utiliser pour obtenir la clé publique. ORIGINAL n’est pas un espace réservé ; il s’agit d’un paramètre pour la bibliothèque libsodium-wrappers.

JavaScript
const sodium = require('libsodium-wrappers')

const secret = 'YOUR_SECRET'
const key = 'YOUR_BASE64_KEY'

//Check if libsodium is ready and then proceed.
sodium.ready.then(() => {
  // Convert the secret and key to a Uint8Array.
  let binkey = sodium.from_base64(key, sodium.base64_variants.ORIGINAL)
  let binsec = sodium.from_string(secret)

  // Encrypt the secret using libsodium
  let encBytes = sodium.crypto_box_seal(binsec, binkey)

  // Convert the encrypted Uint8Array to Base64
  let output = sodium.to_base64(encBytes, sodium.base64_variants.ORIGINAL)

  // Print the output
  console.log(output)
});

Exemple de chiffrement d’un secret à l’aide de Python

Si vous utilisez Python 3, vous pouvez chiffrer votre secret à l’aide de la bibliothèque PyNaCl. Pour plus d’informations, consultez PyNaCl.

Dans l’exemple suivant, remplacez YOUR_SECRET par la valeur de texte brut que vous voulez chiffrer. Remplacez YOUR_BASE64_KEY par votre clé publique encodée en Base64. La documentation du point de terminaison que vous allez utiliser pour créer un secret vous indique quel point de terminaison vous pouvez utiliser pour obtenir la clé publique.

Python
from base64 import b64encode
from nacl import encoding, public

def encrypt(public_key: str, secret_value: str) -> str:
  """Encrypt a Unicode string using the public key."""
  public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder())
  sealed_box = public.SealedBox(public_key)
  encrypted = sealed_box.encrypt(secret_value.encode("utf-8"))
  return b64encode(encrypted).decode("utf-8")

encrypt("YOUR_BASE64_KEY", "YOUR_SECRET")

Exemple de chiffrement d’un secret à l’aide de C#

Si vous utilisez C#, vous pouvez chiffrer votre secret à l’aide du package Sodium.Core. Pour plus d’informations, consultez Sodium.Core.

Dans l’exemple suivant, remplacez YOUR_SECRET par la valeur de texte brut que vous voulez chiffrer. Remplacez YOUR_BASE64_KEY par votre clé publique encodée en Base64. La documentation du point de terminaison que vous allez utiliser pour créer un secret vous indique quel point de terminaison vous pouvez utiliser pour obtenir la clé publique.

C#
var secretValue = System.Text.Encoding.UTF8.GetBytes("YOUR_SECRET");
var publicKey = Convert.FromBase64String("YOUR_BASE64_KEY");

var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey);

Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox));

Exemple de chiffrement d’un secret à l’aide de Ruby

Si vous utilisez Ruby, vous pouvez chiffrer votre secret à l’aide du gemme RbNaCl. Pour plus d’informations, consultez RbNaCl.

Dans l’exemple suivant, remplacez YOUR_SECRET par la valeur de texte brut que vous voulez chiffrer. Remplacez YOUR_BASE64_KEY par votre clé publique encodée en Base64. La documentation du point de terminaison que vous allez utiliser pour créer un secret vous indique quel point de terminaison vous pouvez utiliser pour obtenir la clé publique.

Ruby
require "rbnacl"
require "base64"

key = Base64.decode64("YOUR_BASE64_KEY")
public_key = RbNaCl::PublicKey.new(key)

box = RbNaCl::Boxes::Sealed.from_public_key(public_key)
encrypted_secret = box.encrypt("YOUR_SECRET")

# Print the base64 encoded secret
puts Base64.strict_encode64(encrypted_secret)