{"meta":{"title":"加密 REST API 的机密","intro":"要使用 REST API 创建或更新机密，必须加密机密的值。","product":"REST API","breadcrumbs":[{"href":"/zh/enterprise-cloud@latest/rest","title":"REST API"},{"href":"/zh/enterprise-cloud@latest/rest/guides","title":"指南"},{"href":"/zh/enterprise-cloud@latest/rest/guides/encrypting-secrets-for-the-rest-api","title":"加密机密"}],"documentType":"article"},"body":"# 加密 REST API 的机密\n\n要使用 REST 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\n如果使用的是 Node.js，你可以使用 libsodium-wrappers 库加密机密。 有关详细信息，请参阅 [libsodium-wrappers](https://www.npmjs.com/package/libsodium-wrappers)。\n\n在以下示例中，将 `YOUR_SECRET` 替换为要加密的纯文本值。 将 `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\n如果使用 Python 3，则可以使用 PyNaCl 库加密机密。 有关详细信息，请参阅 [PyNaCl](https://pynacl.readthedocs.io/en/latest/public/#nacl-public-sealedbox)。\n\n在以下示例中，将 `YOUR_SECRET` 替换为要加密的纯文本值。 将 `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\n如果使用的是 C#，你可以使用 Sodium.Core 包加密机密。 有关详细信息，请参阅 [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/)。\n\n在以下示例中，将 `YOUR_SECRET` 替换为要加密的纯文本值。 将 `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\n如果使用的是 Ruby，你可以使用 RbNaCl gem 加密机密。 有关详细信息，请参阅 [RbNaCl](https://github.com/RubyCrypto/rbnacl)。\n\n在以下示例中，将 `YOUR_SECRET` 替换为要加密的纯文本值。 将 `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```"}