Skip to main content

Criptografando segredos para a API REST

Para criar ou atualizar um segredo com a API REST, você deve criptografar o valor desse segredo.

Sobre a criptografia de segredos

Vários pontos de extremidade de API REST permitem criar segredos na GitHub. Para usar esses pontos de extremidade, você deve criptografar o valor do segredo usando o libsodium. Para saber mais, confira a documentação do lidsodium.

Para criptografar um segredo, você precisa de uma chave pública codificada em Base64. É possível obter uma chave pública da API REST. Para determinar qual ponto de extremidade usar para obter a chave pública, consulte a documentação do parâmetro encrypted_value no ponto de extremidade que você usará para criar um segredo.

Exemplo de criptografia de um segredo usando Node.js

Se você estiver usando o Node.js, pode criptografar seu segredo usando a biblioteca libsodium-wrappers. Para obter mais informações, consulte libsodium-wrappers.

No exemplo a seguir, substitua YOUR_SECRET pelo valor de texto sem formatação que você deseja criptografar. Substitua YOUR_BASE64_KEY pela chave pública codificada em Base64. A documentação do ponto de extremidade que você usará para criar um segredo informará qual ponto de extremidade é possível usar para obter a chave pública. ORIGINAL não é um espaço reservado; é um parâmetro para a biblioteca 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)
});

Exemplo de criptografia de um segredo usando Python

Se você está usando o Python 3, pode criptografar seu segredo usando a biblioteca PyNaCl. Para obter mais informações, consulte PyNaCl.

No exemplo a seguir, substitua YOUR_SECRET pelo valor de texto sem formatação que você deseja criptografar. Substitua YOUR_BASE64_KEY pela chave pública codificada em Base64. A documentação do ponto de extremidade que você usará para criar um segredo informará qual ponto de extremidade é possível usar para obter a chave pública.

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

Exemplo de criptografia de um segredo usando C#

Se você está usando o C#, pode criptografar seu segredo usando o pacote Sodium.Core. Para obter mais informações, confira Sodium.Core.

No exemplo a seguir, substitua YOUR_SECRET pelo valor de texto sem formatação que você deseja criptografar. Substitua YOUR_BASE64_KEY pela chave pública codificada em Base64. A documentação do ponto de extremidade que você usará para criar um segredo informará qual ponto de extremidade é possível usar para obter a chave pública.

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

Exemplo de criptografia de um segredo usando Ruby

Se você esta usando o Ruby, pode criptografar seu segredo usando a joia RbNaCl. Para obter mais informações, consulte RbNaCl.

No exemplo a seguir, substitua YOUR_SECRET pelo valor de texto sem formatação que você deseja criptografar. Substitua YOUR_BASE64_KEY pela chave pública codificada em Base64. A documentação do ponto de extremidade que você usará para criar um segredo informará qual ponto de extremidade é possível usar para obter a chave pública.

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)