# 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](https://libsodium.gitbook.io/doc/bindings_for_other_languages).

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](https://www.npmjs.com/package/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 copy
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](https://pynacl.readthedocs.io/en/latest/public/#nacl-public-sealedbox).

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 copy
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](https://www.nuget.org/packages/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.

```csharp copy
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](https://github.com/RubyCrypto/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 copy
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)
```