Skip to main content

Enterprise Server 3.15 は、現在リリース候補として使用できます。

REST API のシークレットの暗号化

REST API を使ってシークレットを作成または更新するには、シークレットの値を暗号化する必要があります。

シークレットの暗号化について

いくつかの REST API エンドポイントを使うと、GitHub でシークレットを作成できます。 これらのエンドポイントを使うには、libsodium を使ってシークレット値を暗号化する必要があります。 詳しくは、libsodium のドキュメントを参照してください。

シークレットを暗号化するには、Base64 でエンコードされた公開キーが必要です。 REST API から公開キーを取得できます。 公開キーの取得に使うエンドポイントを確認するには、シークレットの作成に使うエンドポイントの encrypted_value パラメーターのドキュメントを参照してください。

Node.js を使ってシークレットを暗号化する例

Node.js を使う場合は、libsodium-wrappers ライブラリを使ってシークレットを暗号化できます。 詳しくは、「libsodium-wrappers」を参照してください。

次の例では、YOUR_SECRET を暗号化するプレーンテキスト値に置き換えてください。 YOUR_BASE64_KEY を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。 ORIGINAL はプレースホルダーではありません。これは 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)
});

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# を使う場合は、Sodium.Core パッケージを使ってシークレットを暗号化できます。 詳しくは、「Sodium.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 gem を使ってシークレットを暗号化できます。 詳しくは、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)