О шифровании секретов
Несколько конечных точек REST API позволяют создавать секреты на GitHub. Чтобы использовать эти конечные точки, необходимо зашифровать значение секрета с помощью libsodium. Дополнительные сведения см. в документации по libsodium.
Для шифрования секрета требуется открытый ключ в кодировке Base64. Вы можете получить открытый ключ из REST API. Чтобы определить, какая конечная точка используется для получения открытого ключа, ознакомьтесь с документацией по encrypted_value
параметру в конечной точке, которая будет использоваться для создания секрета.
Пример шифрования секрета с помощью Node.js
Если вы используете Node.js, вы можете зашифровать секрет с помощью библиотеки libsodium-оболочки. Дополнительные сведения см. в статье libsodium-оболочки.
В следующем примере замените YOUR_SECRET
значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY
открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа. ORIGINAL
не является заполнителем; это параметр библиотеки libsodium-оболочки.
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)
});
Пример шифрования секрета с помощью Python
Если вы используете Python 3, вы можете зашифровать секрет с помощью библиотеки PyNaCl. Дополнительные сведения см. в разделе PyNaCl.
В следующем примере замените YOUR_SECRET
значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY
открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа.
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")
Пример шифрования секрета с помощью C#
Если вы используете C#, вы можете зашифровать секрет с помощью пакета Натрия.Core. Дополнительные сведения см. в разделе "Натрий.Core".
В следующем примере замените YOUR_SECRET
значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY
открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа.
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));
Пример шифрования секрета с помощью Ruby
Если вы используете Ruby, вы можете зашифровать секрет с помощью драгоценных камней RbNaCl. Дополнительные сведения см. в разделе RbNaCl.
В следующем примере замените YOUR_SECRET
значение обычного текста, которое требуется зашифровать. Замените YOUR_BASE64_KEY
открытый ключ в кодировке Base64. В документации по конечной точке, используемой для создания секрета, вы узнаете, какую конечную точку можно использовать для получения открытого ключа.
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)