Skip to main content

Шифрование секретов для REST API

Чтобы создать или обновить секрет с помощью REST API, необходимо зашифровать значение секрета.

О шифровании секретов

Несколько конечных точек REST API позволяют создавать секреты на GitHub. Чтобы использовать эти конечные точки, необходимо зашифровать значение секрета с помощью libsodium. Дополнительные сведения см. в документации по libsodium.

Для шифрования секрета требуется открытый ключ в кодировке Base64. Вы можете получить открытый ключ из REST API. Чтобы определить, какая конечная точка используется для получения открытого ключа, ознакомьтесь с документацией по encrypted_value параметру в конечной точке, которая будет использоваться для создания секрета.

Пример шифрования секрета с помощью Node.js

Если вы используете Node.js, вы можете зашифровать секрет с помощью библиотеки libsodium-оболочки. Дополнительные сведения см. в статье libsodium-оболочки.

В следующем примере замените YOUR_SECRET значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа. ORIGINAL не является заполнителем; это параметр библиотеки libsodium-оболочки.

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

Пример шифрования секрета с помощью Python

Если вы используете Python 3, вы можете зашифровать секрет с помощью библиотеки PyNaCl. Дополнительные сведения см. в разделе PyNaCl.

В следующем примере замените YOUR_SECRET значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа.

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

Пример шифрования секрета с помощью C#

Если вы используете C#, вы можете зашифровать секрет с помощью пакета Натрия.Core. Дополнительные сведения см. в разделе "Натрий.Core".

В следующем примере замените YOUR_SECRET значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа.

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

Пример шифрования секрета с помощью Ruby

Если вы используете Ruby, вы можете зашифровать секрет с помощью драгоценных камней RbNaCl. Дополнительные сведения см. в разделе RbNaCl.

В следующем примере замените YOUR_SECRET значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа.

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)