{"meta":{"title":"REST API のシークレットの暗号化","intro":"REST API を使ってシークレットを作成または更新するには、シークレットの値を暗号化する必要があります。","product":"REST API","breadcrumbs":[{"href":"/ja/rest","title":"REST API"},{"href":"/ja/rest/guides","title":"ガイド"},{"href":"/ja/rest/guides/encrypting-secrets-for-the-rest-api","title":"シークレットを暗号化する"}],"documentType":"article"},"body":"# REST API のシークレットの暗号化\n\nREST API を使ってシークレットを作成または更新するには、シークレットの値を暗号化する必要があります。\n\n## シークレットの暗号化について\n\nいくつかの REST API エンドポイントを使うと、GitHub でシークレットを作成できます。 これらのエンドポイントを使うには、libsodium を使ってシークレット値を暗号化する必要があります。 詳しくは、[libsodium のドキュメント](https://libsodium.gitbook.io/doc/bindings_for_other_languages)を参照してください。\n\nシークレットを暗号化するには、Base64 でエンコードされた公開キーが必要です。 REST API から公開キーを取得できます。 公開キーの取得に使うエンドポイントを確認するには、シークレットの作成に使うエンドポイントの `encrypted_value` パラメーターのドキュメントを参照してください。\n\n## Node.js を使ってシークレットを暗号化する例\n\nNode.js を使う場合は、libsodium-wrappers ライブラリを使ってシークレットを暗号化できます。 詳しくは、「[libsodium-wrappers](https://www.npmjs.com/package/libsodium-wrappers)」を参照してください。\n\n次の例では、`YOUR_SECRET` を暗号化するプレーンテキスト値に置き換えてください。 \n`YOUR_BASE64_KEY` を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。 \n`ORIGINAL` はプレースホルダーではありません。これは libsodium-wrappers ライブラリのパラメーターです。\n\n```javascript copy\nconst sodium = require('libsodium-wrappers')\n\nconst secret = 'YOUR_SECRET'\nconst key = 'YOUR_BASE64_KEY'\n\n//Check if libsodium is ready and then proceed.\nsodium.ready.then(() => {\n  // Convert the secret and key to a Uint8Array.\n  let binkey = sodium.from_base64(key, sodium.base64_variants.ORIGINAL)\n  let binsec = sodium.from_string(secret)\n\n  // Encrypt the secret using libsodium\n  let encBytes = sodium.crypto_box_seal(binsec, binkey)\n\n  // Convert the encrypted Uint8Array to Base64\n  let output = sodium.to_base64(encBytes, sodium.base64_variants.ORIGINAL)\n\n  // Print the output\n  console.log(output)\n});\n```\n\n## Pythonを使用したシークレットの暗号化の例\n\nPython 3 を使用している場合は、PyNaCl ライブラリを使用してシークレットを暗号化できます。 詳しくは、[PyNaCl](https://pynacl.readthedocs.io/en/latest/public/#nacl-public-sealedbox) を参照してください。\n\n次の例では、`YOUR_SECRET` を暗号化するプレーンテキスト値に置き換えてください。 \n`YOUR_BASE64_KEY` を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。\n\n```python copy\nfrom base64 import b64encode\nfrom nacl import encoding, public\n\ndef encrypt(public_key: str, secret_value: str) -> str:\n  \"\"\"Encrypt a Unicode string using the public key.\"\"\"\n  public_key = public.PublicKey(public_key.encode(\"utf-8\"), encoding.Base64Encoder())\n  sealed_box = public.SealedBox(public_key)\n  encrypted = sealed_box.encrypt(secret_value.encode(\"utf-8\"))\n  return b64encode(encrypted).decode(\"utf-8\")\n\nencrypt(\"YOUR_BASE64_KEY\", \"YOUR_SECRET\")\n```\n\n## C# を使ってシークレットを暗号化する例\n\nC# を使う場合は、Sodium.Core パッケージを使ってシークレットを暗号化できます。 詳しくは、「[Sodium.Core](https://www.nuget.org/packages/Sodium.Core/)」を参照してください。\n\n次の例では、`YOUR_SECRET` を暗号化するプレーンテキスト値に置き換えてください。 \n`YOUR_BASE64_KEY` を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。\n\n```csharp copy\nvar secretValue = System.Text.Encoding.UTF8.GetBytes(\"YOUR_SECRET\");\nvar publicKey = Convert.FromBase64String(\"YOUR_BASE64_KEY\");\n\nvar sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey);\n\nConsole.WriteLine(Convert.ToBase64String(sealedPublicKeyBox));\n```\n\n## Ruby を使ってシークレットを暗号化する例\n\nRuby を使う場合は、RbNaCl gem を使ってシークレットを暗号化できます。 詳しくは、[RbNaCl](https://github.com/RubyCrypto/rbnacl) に関するページを参照してください。\n\n次の例では、`YOUR_SECRET` を暗号化するプレーンテキスト値に置き換えてください。 \n`YOUR_BASE64_KEY` を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。\n\n```ruby copy\nrequire \"rbnacl\"\nrequire \"base64\"\n\nkey = Base64.decode64(\"YOUR_BASE64_KEY\")\npublic_key = RbNaCl::PublicKey.new(key)\n\nbox = RbNaCl::Boxes::Sealed.from_public_key(public_key)\nencrypted_secret = box.encrypt(\"YOUR_SECRET\")\n\n# Print the base64 encoded secret\nputs Base64.strict_encode64(encrypted_secret)\n```"}