Acerca del cifrado de secretos
Varios puntos de conexión de API de REST permiten crear secretos en los GitHub. Para usar estos puntos de conexión, debe cifrar el valor del secreto mediante libsodium. Para más información, consulte la documentación sobre libsodium.
Para cifrar un secreto, necesitas una clave pública codificada en Base64. Puede obtener una clave pública de la API de REST. Para determinar qué punto de conexión se va a usar para obtener la clave pública, consulte la documentación del parámetro encrypted_value
en el punto de conexión que usará para crear un secreto.
Ejemplo para cifrar un secreto mediante Node.js
Si usa Node.js, puede cifrar el secreto mediante la biblioteca libsodium-wrappers. Para más información, consulte: libsodium-wrappers.
En el ejemplo siguiente, reemplace YOUR_SECRET
por el valor de texto sin formato que desea cifrar. Reemplace YOUR_BASE64_KEY
por la clave pública codificada en Base64. La documentación del punto de conexión que va a usar para crear un secreto te indicará qué punto de conexión puede usar para obtener la clave pública. ORIGINAL
no es un marcador de posición; es un parámetro para la biblioteca libsodium-wrappers.
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) });
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)
});
Ejemplo de cifrado de un secreto mediante Python
Si usa Python 3, puede cifrar el secreto mediante la biblioteca PyNaCl. Para más información, consulta PyNaCl.
En el ejemplo siguiente, reemplace YOUR_SECRET
por el valor de texto sin formato que desea cifrar. Reemplace YOUR_BASE64_KEY
por la clave pública codificada en Base64. La documentación del punto de conexión que va a usar para crear un secreto te indicará qué punto de conexión puede usar para obtener la clave pública.
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")
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")
Ejemplo de cifrado de un secreto mediante C#
Si usa C#, puede cifrar el secreto mediante el paquete Sodium.Core. Para más información, consulte Sodium.Core.
En el ejemplo siguiente, reemplace YOUR_SECRET
por el valor de texto sin formato que desea cifrar. Reemplace YOUR_BASE64_KEY
por la clave pública codificada en Base64. La documentación del punto de conexión que va a usar para crear un secreto te indicará qué punto de conexión puede usar para obtener la clave pública.
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));
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));
Ejemplo de cifrado de un secreto mediante Ruby
Si usa Ruby, puede cifrar el secreto mediante la gema de RbNaCl. Para más información, consulte RbNaCl.
En el ejemplo siguiente, reemplace YOUR_SECRET
por el valor de texto sin formato que desea cifrar. Reemplace YOUR_BASE64_KEY
por la clave pública codificada en Base64. La documentación del punto de conexión que va a usar para crear un secreto te indicará qué punto de conexión puede usar para obtener la clave pública.
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)
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)