{"meta":{"title":"Criptografando segredos para a API REST","intro":"Para criar ou atualizar um segredo com a API REST, você deve criptografar o valor desse segredo.","product":"API REST","breadcrumbs":[{"href":"/pt/enterprise-cloud@latest/rest","title":"API REST"},{"href":"/pt/enterprise-cloud@latest/rest/guides","title":"Guias"},{"href":"/pt/enterprise-cloud@latest/rest/guides/encrypting-secrets-for-the-rest-api","title":"Criptografar segredos"}],"documentType":"article"},"body":"# Criptografando segredos para a API REST\n\nPara criar ou atualizar um segredo com a API REST, você deve criptografar o valor desse segredo.\n\n## Sobre a criptografia de segredos\n\nVários endpoints de API REST permitem criar segredos de segurança na GitHub. Para usar esses endpoints, você deve criptografar o valor do segredo usando libsodium. Para saber mais, confira a [documentação do lidsodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages).\n\nPara criptografar um segredo, você precisa de uma chave pública codificada em Base64. É possível obter uma chave pública da API REST. Para determinar qual ponto de extremidade usar para obter a chave pública, consulte a documentação do parâmetro `encrypted_value` no ponto de extremidade que você usará para criar um segredo.\n\n## Exemplo de criptografia de um segredo usando Node.js\n\nSe você estiver usando o Node.js, pode criptografar seu segredo usando a biblioteca libsodium-wrappers. Para obter mais informações, consulte [libsodium-wrappers](https://www.npmjs.com/package/libsodium-wrappers).\n\nNo exemplo a seguir, substitua `YOUR_SECRET` pelo valor de texto sem formatação que você deseja criptografar. Substitua `YOUR_BASE64_KEY` pela chave pública codificada em Base64. A documentação do endpoint que você usará para criar um segredo informará qual endpoint você pode usar para obter a chave pública. \n`ORIGINAL` não é um espaço reservado; é um parâmetro para a biblioteca 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## Exemplo de criptografia de um segredo usando Python\n\nSe você estiver usando Python 3, poderá criptografar seu segredo usando a biblioteca PyNaCl. Para obter mais informações, consulte [PyNaCl](https://pynacl.readthedocs.io/en/latest/public/#nacl-public-sealedbox).\n\nNo exemplo a seguir, substitua `YOUR_SECRET` pelo valor de texto sem formatação que você deseja criptografar. Substitua `YOUR_BASE64_KEY` pela chave pública codificada em Base64. A documentação do endpoint que você usará para criar um segredo informará qual endpoint você pode usar para obter a chave pública.\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## Exemplo de criptografia de um segredo usando C#\n\nSe você está usando o C#, pode criptografar seu segredo usando o pacote Sodium.Core. Para obter mais informações, confira [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/).\n\nNo exemplo a seguir, substitua `YOUR_SECRET` pelo valor de texto sem formatação que você deseja criptografar. Substitua `YOUR_BASE64_KEY` pela chave pública codificada em Base64. A documentação do endpoint que você usará para criar um segredo informará qual endpoint você pode usar para obter a chave pública.\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## Exemplo de criptografia de um segredo usando Ruby\n\nSe você esta usando o Ruby, pode criptografar seu segredo usando a joia RbNaCl. Para obter mais informações, consulte [RbNaCl](https://github.com/RubyCrypto/rbnacl).\n\nNo exemplo a seguir, substitua `YOUR_SECRET` pelo valor de texto sem formatação que você deseja criptografar. Substitua `YOUR_BASE64_KEY` pela chave pública codificada em Base64. A documentação do endpoint que você usará para criar um segredo informará qual endpoint você pode usar para obter a chave pública.\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```"}