# Verschlüsseln geheimer Schlüssel für die REST-API

Um einen geheimen Schlüssel mit der REST-API zu erstellen oder zu aktualisieren, müssen Sie den Wert des geheimen Schlüssels verschlüsseln.

## Informationen zu verschlüsselten Geheimnissen

Mit mehreren REST-API-Endpunkten können Sie geheime Schlüssel zu GitHub erstellen. Um diese Endpunkte zu verwenden, müssen Sie den geheimen Wert mithilfe von libsodium verschlüsseln. Weitere Informationen finden Sie in der [libsodium-Dokumentation](https://libsodium.gitbook.io/doc/bindings_for_other_languages).

Um einen geheimen Schlüssel zu verschlüsseln, benötigen Sie einen base64-codierten öffentlichen Schlüssel. Sie können einen öffentlichen Schlüssel aus der REST-API abrufen. Um zu bestimmen, welcher Endpunkt zum Abrufen des öffentlichen Schlüssels verwendet werden soll, schauen Sie sich die Dokumentation für den `encrypted_value` Parameter im Endpunkt an, den Sie zum Erstellen eines geheimen Schlüssels verwenden möchten.

## Beispiel zum Verschlüsseln eines geheimen Schlüssels mithilfe von Node.js

Wenn Sie Node.js verwenden, können Sie Ihr Geheimnis mithilfe der Bibliothek libsodium-wrappers verschlüsseln. Weitere Informationen finden Sie unter [libsodium-wrappers](https://www.npmjs.com/package/libsodium-wrappers).

Ersetzen Sie im folgenden Beispiel `YOUR_SECRET` durch den Klartextwert, den Sie verschlüsseln möchten. Ersetzen Sie `YOUR_BASE64_KEY` durch Ihren Base64-codierten öffentlichen Schlüssel. Die Dokumentation für den Endpunkt, den Sie zum Erstellen eines geheimen Schlüssels verwenden, teilt Ihnen mit, welchen Endpunkt Sie verwenden können, um den öffentlichen Schlüssel abzurufen. 
`ORIGINAL` ist kein Platzhalter; es ist ein Parameter für die libsodium-wrappers-Bibliothek.

```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)
});
```

## Beispiel zum Verschlüsseln eines geheimen Schlüssels mithilfe von Python

Wenn Sie Python 3 verwenden, können Sie Ihr Geheimnis mithilfe der PyNaCl-Bibliothek verschlüsseln. Weitere Informationen finden Sie unter [PyNaCl](https://pynacl.readthedocs.io/en/latest/public/#nacl-public-sealedbox).

Ersetzen Sie im folgenden Beispiel `YOUR_SECRET` durch den Klartextwert, den Sie verschlüsseln möchten. Ersetzen Sie `YOUR_BASE64_KEY` durch Ihren Base64-codierten öffentlichen Schlüssel. Die Dokumentation für den Endpunkt, den Sie zum Erstellen eines geheimen Schlüssels verwenden, teilt Ihnen mit, welchen Endpunkt Sie verwenden können, um den öffentlichen Schlüssel abzurufen.

```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")
```

## Beispiel zum Verschlüsseln eines geheimen Schlüssels mit C#

Wenn Sie C# verwenden, können Sie Ihr Geheimnis mithilfe des Natrium.Core-Pakets verschlüsseln. Weitere Informationen finden Sie unter [Natrium.Core](https://www.nuget.org/packages/Sodium.Core/).

Ersetzen Sie im folgenden Beispiel `YOUR_SECRET` durch den Klartextwert, den Sie verschlüsseln möchten. Ersetzen Sie `YOUR_BASE64_KEY` durch Ihren Base64-codierten öffentlichen Schlüssel. Die Dokumentation für den Endpunkt, den Sie zum Erstellen eines geheimen Schlüssels verwenden, teilt Ihnen mit, welchen Endpunkt Sie verwenden können, um den öffentlichen Schlüssel abzurufen.

```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));
```

## Beispiel zum Verschlüsseln eines geheimen Schlüssels mithilfe von Ruby

Wenn Sie Ruby verwenden, können Sie Ihr Geheimnis mit dem RbNaCl-Juwel verschlüsseln. Weitere Informationen finden Sie unter [RbNaCl](https://github.com/RubyCrypto/rbnacl).

Ersetzen Sie im folgenden Beispiel `YOUR_SECRET` durch den Klartextwert, den Sie verschlüsseln möchten. Ersetzen Sie `YOUR_BASE64_KEY` durch Ihren Base64-codierten öffentlichen Schlüssel. Die Dokumentation für den Endpunkt, den Sie zum Erstellen eines geheimen Schlüssels verwenden, teilt Ihnen mit, welchen Endpunkt Sie verwenden können, um den öffentlichen Schlüssel abzurufen.

```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)
```