Skip to main content

이 버전의 GitHub Enterprise는 다음 날짜에 중단되었습니다. 2024-03-26. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 더 뛰어난 성능, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise Server로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

REST API에 대한 비밀 암호화

REST API를 사용하여 비밀을 만들거나 업데이트하려면 비밀 값을 암호화해야 합니다.

암호화된 비밀 정보

여러 REST API 엔드포인트를 사용하면 GitHub에 비밀을 만들 수 있습니다. 이러한 엔드포인트를 사용하려면 libsodium을 사용하여 비밀 값을 암호화해야 합니다. 자세한 정보는 libsodium 설명서를 참조하세요.

비밀을 암호화하려면 Base64로 인코딩된 공개 키가 필요합니다. REST API에서 공개 키를 받을 수 있습니다. 공개 키를 가져오는 데 사용할 엔드포인트를 확인하려면 비밀을 만드는 데 사용할 엔드포인트의 encrypted_value 매개 변수에 대한 설명서를 참조하세요.

Node.js를 사용하여 비밀을 암호화하는 예제

Node.js를 사용하는 경우 libsodium-wrappers 라이브러리를 사용하여 비밀을 암호화할 수 있습니다. 자세한 정보는 libsodium-wrappers를 참조하세요.

다음 예제에서는 암호화하려는 일반 텍스트 값으로 YOUR_SECRET을 바꿉니다. Base64로 인코딩된 공개 키로 YOUR_BASE64_KEY를 바꿉니다. 비밀을 만드는 데 사용할 엔드포인트에 대한 설명서에서는 공개 키를 가져오는 데 사용할 수 있는 엔드포인트를 알려줍니다. 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을 바꿉니다. Base64로 인코딩된 공개 키로 YOUR_BASE64_KEY를 바꿉니다. 비밀을 만드는 데 사용할 엔드포인트에 대한 설명서에서는 공개 키를 가져오는 데 사용할 수 있는 엔드포인트를 알려줍니다.

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을 바꿉니다. Base64로 인코딩된 공개 키로 YOUR_BASE64_KEY를 바꿉니다. 비밀을 만드는 데 사용할 엔드포인트에 대한 설명서에서는 공개 키를 가져오는 데 사용할 수 있는 엔드포인트를 알려줍니다.

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을 바꿉니다. Base64로 인코딩된 공개 키로 YOUR_BASE64_KEY를 바꿉니다. 비밀을 만드는 데 사용할 엔드포인트에 대한 설명서에서는 공개 키를 가져오는 데 사용할 수 있는 엔드포인트를 알려줍니다.

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)