UiPath Documentation
activities
latest
false
Atividades do desenvolvedor
Importante :
A tradução automática foi aplicada parcialmente neste conteúdo. A localização de um conteúdo recém-publicado pode levar de 1 a 2 semanas para ficar disponível.

APIs de automação codificadas com criptografia

APIs de automação codificadas para o pacote de atividades de Criptografia, cobrindo criptografia simétrica, hash com chave e PGP.

UiPath.Cryptography.Activities

API de fluxo de trabalho codificada para criptografia e descriptografia simétrica, hash com chave e criptografia PGP, descriptografia, assinatura, assinatura sem criptografia, verificação e geração de chave. Use essas APIs ao projetar automações codificadas. Visite Automações codificadas para saber mais sobre automações codificadas e como projetá-las usando APIs.

  • Acessador de serviço: cryptography (tipo ICryptographyService)
  • Pacote obrigatório: "UiPath.Cryptography.Activities": "*" nas dependências project.json .

Namespaces importados automaticamente

Esses namespaces estão automaticamente disponíveis em fluxos de trabalho codificados quando esse pacote é instalado:

System
System.IO
System.Text
UiPath.Cryptography
UiPath.Cryptography.Activities
UiPath.Cryptography.Activities.API
UiPath.Cryptography.Enums
System
System.IO
System.Text
UiPath.Cryptography
UiPath.Cryptography.Activities
UiPath.Cryptography.Activities.API
UiPath.Cryptography.Enums

Visão geral do serviço

O serviço expõe cryptography as operações como chamadas de método diretas. Não há conexão, identificador ou escopo para abrir. Ele é registrado como um unificado sem estado, então o acessador é compartilhado no fluxo de trabalho e seus métodos são seguros para serem chamados simultaneamente. Chame métodos no acessador de serviço diretamente:

var key = PasswordKey.FromPassword("mykey", Encoding.UTF8);
var ciphertext = cryptography.EncryptText("secret", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
var key = PasswordKey.FromPassword("mykey", Encoding.UTF8);
var ciphertext = cryptography.EncryptText("secret", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));

Bytes, Texto e Formulários de arquivo

Cada operação lógica expõe três formulários de entrada/saída. Escolha uma que corresponda aos dados que você já tem:

FormulárioSufixoEntrada → SaídaQuando usar
Bytes(base)byte[]byte[]Dados binários ou já carregados.
Texto...Textstringstring (Base64 ou ASCII- Importado)Dados que chegam como texto (HTTP, configuração, ambiente).
de transações...Filecaminho do arquivo → caminho do arquivoDados que residem no disco.

Material da chave

Operações simétricas e keyed-Hash aceitam o material da chave como um dos dois subtipos CryptoKey validação. A classe que você escolher determina em quais formatos de conexão a chave pode ser usada e o sistema de tipos impõe isso no tempo de compilação por meio de fábricas de formatos.

PasswordKey

Material de senha a ser esticado em RBKF2 em uma chave de cifra. Usado com os formatos de conexão Classic, Owasp2026 e OpenSslEnc .

MatrizFinalidade
PasswordKey.FromPassword(string password, Encoding encoding)Senha ou frase secreta como um string.
PasswordKey.FromPassword(SecureString password, Encoding encoding)Mesmo, proveniente de um armazenamento secreto ou entrada do usuário.

PasswordKey a senha internamente como um SecureString (a fábrica de string copia os caracteres de entrada em um) e materializa os bytes da chave de cifra just-in-time em cada operação. Os bytes residem apenas no quadro de pilha da operação e nunca são fixados na instância PasswordKey ; os buffers intermediários são zerados após cada materialização.

PasswordKey é IDisposable: chamar Dispose() zera prontamente o buffer protegido e o acesso KeyBytes subsequente gera ObjectDisposedException. O descarte é recomendado para fluxos de trabalho de longa duração.

RawKey

Uma chave de cifra literal do comprimento necessário exato do algoritmo (por exemplo, 32 bytes para AES-256). Usado com o formato de conexão Raw . Nenhum KPF é aplicado. RawKey é IDisposable: chamar Dispose() zera os bytes de chave mantidos no local.

MatrizFinalidade
RawKey.FromBytes(byte[] keyBytes)Uma chave já carregada em bytes.
RawKey.FromHex(string hex)Uma chave codificada como hexadecimal.
RawKey.FromBase64(string base64)Uma chave codificada como Base64.

O tamanho da chave não é validado pelas fábricas. Ele é verificado quando você chama o método de criptografia ou descriptografia, e um comprimento inválido para o algoritmo escolhido gera ArgumentException listando os comprimentos de bytes legais (por exemplo, 16, 24 ou 32 para AES). Construa a chave com exatamente o tamanho de chave necessário do algoritmo.

Os métodos de hash com chave aceitam qualquer um dos subtipos, porque aceitam CryptoKey diretamente e não têm eixo com formato de conexão.

Opções simétricas

SymmetricEncryptOptions e SymmetricDecryptOptions agrupam a chave, o formato de conexão e quaisquer valores específicos do formato (o IV para Raw, as iterações KPD para Owasp2026 e OpenSslEnc). Construa-os por meio de uma fábrica de formatos. O tipo de parâmetro-chave da UiPath Assistant impõe o emparelhamento do tipo de chave e do formato do conector no tempo de compilação, portanto, um PasswordKey não pode ser passado para Raw(...) e um RawKey não pode ser passado para Classic(...).

MatrizFormatTipoDeChaveObservações
SymmetricEncryptOptions.Classic(PasswordKey key, Encoding encoding = null)ClassicPasswordKeyPadrão. Formato de conexão congelante para compatibilidade retroativa (SBKF2-HTAC-SHA1 em 10.000 iterações).
SymmetricEncryptOptions.Owasp2026(PasswordKey key, int kdfIterations = 1_300_000, Encoding encoding = null)Owasp2026PasswordKeyMesmo layout que o Clássico, com RBKF2-HTAC-SHA1 na contagem de iterações recomendada do OWASP 2026.
SymmetricEncryptOptions.Raw(RawKey key, byte[] iv = null, Encoding encoding = null)RawRawKeyChave fornecida pelo chamador e IV, para interoperabilidade de terceiros.
SymmetricEncryptOptions.OpenSslEnc(PasswordKey key, int kdfIterations = 600_000, Encoding encoding = null, AesKeySize aesKeySize = AesKeySize.Aes256)OpenSslEncPasswordKeyopenssl enc-compatível (Salted__ com BBKF2-HTAC-SHA256). aesKeySize seleciona AES-128, -192 ou -256 para corresponder ao openssl enc -aes-N-cbc dos pares.

As famílias SymmetricDecryptOptions assumem a mesma forma, exceto que não há nenhum VM no lado de descriptografia porque o VM é lido automaticamente a partir do fluxo de texto cifrado. O parâmetro encoding: opcional define a codificação de texto nas opções (padrão para UTF-8) e é consultado apenas por EncryptText e DecryptText.

Um objeto de opções construído é somente leitura, mas introexplorável: CryptoOptions expõe os getters Key, Format, KdfIterations e TextEncoding; SymmetricEncryptOptions também expõe IV e AesKeySize; e SymmetricDecryptOptions expõe AesKeySize.

IV e estratégia de Sal

Todos os métodos de criptografia simétrica são não determinísticos por padrão: um novo sal aleatório de 8 bytes (quando aplicável) e IV ou nonce são gerados em cada chamada e incorporados no fluxo de texto cifrado. A criptografia do mesmo texto simples duas vezes sempre produz textos cifrados diferentes, e o método de descriptografia de correspondência reconstrui o sales e o VM do mesmo stream automaticamente.

  • Algoritmos da família CBC (AES, Rijndael, DES, TripleDES, RC2) usam preenchimento PKCS7, modo CBC e um IV aleatório.
  • é a Criptografia AESGCM com Dados Associados (AEAD), com um nonce aleatório de 96 bits e uma tag de autenticação de 128 bits. Recomendado para novos fluxos de trabalho.
  • ChaCha20Poly1305 é uma alternativa AEAD ao AES-GCM.

Para Raw, você pode fornecer um IV explícito por meio de SymmetricEncryptOptions.Raw(key, iv). Passe null (o padrão de fábrica) para permitir que a cifra gere um.

Material da chave PGP

Os métodos PGP usam identificadores de chave com estrutura de dados rigorosa. Construa-os uma vez e reutilize-os em chamadas.

MatrizFinalidade
PgpPublicKey.FromBytes(byte[] keyBytes)Chave pública de bytes na memória (ASCII ou binária).
PgpPublicKey.FromFilePath(string path)Chave pública carregada de um arquivo .asc ou .gpg .
PgpPrivateKey.FromBytes(byte[] keyBytes, string passphrase)Chave privada e frase secreta, vinculadas.
PgpPrivateKey.FromBytes(byte[] keyBytes, SecureString passphrase)O mesmo, com uma frase secreta SecureString .
PgpPrivateKey.FromFilePath(string path, string passphrase)Chave privada de um arquivo.
PgpPrivateKey.FromFilePath(string path, SecureString passphrase)Chave privada de um arquivo, com uma frase secreta SecureString .

Cada identificador de chave também expõe dois métodos de instância:

MembroFinalidade
byte[] ToBytes()Retorna uma cópia dos bytes da chave conforme carregado: ASCII com acesso se a chave tiver sido criada a partir de uma entrada chaveada, binário se carregado a partir de binário. As chaves retornadas por PgpGenerateKeys são protegidas por ASCII.
void Save(string filePath, bool overwrite = false)Grava a chave no disco. Gera InvalidOperationException se o arquivo existir e overwrite for false.

PgpKeyPair (retornado por PgpGenerateKeys ou construído diretamente com new PgpKeyPair(publicKey, privateKey)) contém um par público/privado correspondente. Use pair.PublicKey e pair.PrivateKey ou desconstrua com var (pub, priv) = pair;. Persiste com pair.PublicKey.Save(path) e pair.PrivateKey.Save(path) quando você precisar de arquivos no disco.

Passar um PgpPrivateKey para um método de criptografia implica assinatura, e passar um PgpPublicKey para um método de descriptografia implica a verificação de assinatura. Os sinalizadores bool sign ou bool verifySignature separados não são usados.

PgpPrivateKey sua frase secreta como um SecureString para o tempo de vida da instância. Ele é materializado para um string gerenciado apenas para a duração de cada operação criptográfica, porque a biblioteca BoncyCastle subjacente requer um string simples. PgpPrivateKey é IDisposable: chamar Dispose() zera prontamente o buffer protegido. PgpPublicKey não tem nenhum material secreto e não é IDisposable.

Relacionamento com as atividades

A API codificada e as atividades Criptografia XAML são executadas no mesmo núcleo criptográfico, portanto, estão em paridade completa em:

  • Algoritmos e algoritmos de hash com chave
  • Formatos de conexão (Classic, Owasp2026, Raw, OpenSslEnc)
  • IV, iterações KPD, tamanho da chave AES e opções de codificação
  • Cada operação PGP

Qualquer coisa que você possa computar com uma atividade, você pode computar com este serviço. As diferenças são sobre o formato de entrada/saída e o formulário de entrada da chave, não sobre a capacidade.

A API codificada faz mais do que as atividades:

Recurso somente codificadoDetalhe
Entrada/saída de bytes em cada operaçãoEncryptBytes / DecryptBytes, KeyedHashBytes, PgpEncryptBytes / PgpDecryptBytes, PgpSignBytes / PgpClearSignBytes, PgpVerifyBytes / PgpVerifyClearSignedBytes. Nenhuma atividade tem um formulário byte[] .
Chaves byte[] brutasRawKey.FromBytes(byte[]) para hash Raw e com chave. As atividades só podem fornecer chaves brutas como strings hexadecimais ou Base64.
Material da chave PGP na memóriaPgpPublicKey.FromBytes e PgpPrivateKey.FromBytes que você opere sem arquivos de chave no disco. As atividades exigem arquivos de chave.
Text e Bytes assinam / Clear Sign / VerificamPgpSignText / PgpClearSignText, PgpVerifyText / PgpVerifyClearSignedText e seus formulários de Bytes. As atividades expõem apenas Sign, ClearSign e Verify baseados em arquivos.
Na memória PgpKeyPairPgpGenerateKeys retorna um par de chaves utilizável sem forçar a saída do arquivo.

As atividades fazem duas coisas que a API codificada não faz, nenhuma das quais é um recurso criptográfico:

  • Identificadores de recursos da UiPath (IResource / ILocalResource) como entradas e saídas. A API codificada segue caminhos de arquivos string simples e byte[].
  • Continuar com erro no comportamento de ingerir e continuar. Em um fluxo de trabalho codificado, você usa try/catch comuns, porque todo método gera falha.
Observação:

As atividades Text dividem a codificação de chave e a codificação de texto simples em duas propriedades. Na API codificada, a codificação de senha é definida em PasswordKey.FromPassword(..., encoding) e a codificação de texto simples por meio do parâmetro de opções encoding: . Ambos os eixos permanecem verificáveis de forma independente.

Migração da API codificada anteriormente

A superfície de API codificada introduzida na versão anterior foi consolidada nesta versão. As formas de chamada antigas (sobrecargas de teclas string / SecureString / byte[] separadas com um parâmetro Encoding , mais um PgpGenerateKeys baseado em caminho) são substituídas por um único formato baseado em opções por operação, então a chave O emparelhamento -type e wire-format é imposto no tempo de compilação.

Não há correções [Obsolete] : o código escrito na API anterior deve ser atualizado para compilar com este pacote.

BeforeDepois
EncryptBytes(input, algo, string key, Encoding enc)EncryptBytes(input, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc)))
EncryptBytes(input, algo, SecureString key, Encoding enc)EncryptBytes(input, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc)))
EncryptBytes(input, algo, byte[] keyBytes)EncryptBytes(input, algo, SymmetricEncryptOptions.Raw(RawKey.FromBytes(keyBytes)))
EncryptText(input, algo, key, enc)EncryptText(input, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc), enc))
EncryptFile(in, out, algo, key, enc, overwrite)EncryptFile(in, out, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc)), overwrite)
DecryptBytes / DecryptText / DecryptFileMesma forma, com SymmetricDecryptOptions.<Format>(...).
KeyedHashBytes(input, algo, string key, Encoding enc)KeyedHashBytes(input, algo, PasswordKey.FromPassword(key, enc))
KeyedHashBytes(input, algo, byte[] keyBytes)KeyedHashBytes(input, algo, RawKey.FromBytes(keyBytes))
KeyedHashText(input, algo, string key, Encoding enc)KeyedHashText(input, algo, PasswordKey.FromPassword(key, enc), enc)
KeyedHashFile(inputPath, algo, string key, Encoding enc)KeyedHashFile(inputPath, algo, PasswordKey.FromPassword(key, enc))
PgpGenerateKeys(publicKeyPath, privateKeyPath, userId, passphrase, keySize)var pair = PgpGenerateKeys(userId, passphrase, keySize); pair.PublicKey.Save(publicKeyPath); pair.PrivateKey.Save(privateKeyPath);

Como cada tipo de chave e opções é novo, o código que faz referência às sobrecargas antigas falha ao compilar em vez de detectar silenciosamente uma sobrecarga diferente. A codificação de texto padrão permanece UTF-8, portanto, o código que dependia do padrão UTF-8 anterior não precisa de alteração comportamental além da reformulação das opções.

Criptografia simétrica

byte[] EncryptBytes(byte[] input, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options)

Criptografa bytes arbitrários. O parâmetro options carrega o formato de chave e conexão. Retorna o texto cifrado pelo formato de conexão escolhido.

string EncryptText(string input, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options)

Criptografa uma string e retorna o resultado como texto cifrado codificado em Base64. A codificação de texto simples é lida a partir de options.TextEncoding, com padrão para UTF-8.

void EncryptFile(string inputPath, string outputPath, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options, bool overwrite = false)

Lê um arquivo, o criptografa e grava o resultado. Gera InvalidOperationException se outputPath existir e overwrite for false.

Descriptografia simétrica

byte[] DecryptBytes(byte[] input, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options)

Descriptografa o texto criptografado produzido por EncryptBytes. options.Format deve corresponder ao formato usado no momento da criptografia. Retorna os bytes de texto simples.

string DecryptText(string input, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options)

Descriptografa um texto cifrado codificado em Base64 produzido por EncryptText e retorna o texto simples. A codificação de texto simples é lida a partir de options.TextEncoding, deve corresponder à codificação usada no momento da criptografia e tem como padrão UTF-8.

void DecryptFile(string inputPath, string outputPath, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options, bool overwrite = false)

Lê um arquivo criptografado e grava o texto simples. Gera InvalidOperationException se outputPath existir e overwrite for false.

Hash com chave

Os métodos Keyed-Hash calculam um HMAC (ou um hash simples para algoritmos não HMAC) e retornam o resultado como uma string hexadecimal maiúscula. A operação é unidirecional e não tem inversa.

string KeyedHashBytes(byte[] input, KeyedHashAlgorithms algorithm, CryptoKey key)

string KeyedHashText(string input, KeyedHashAlgorithms algorithm, CryptoKey key, Encoding encoding = null)

string KeyedHashFile(string inputPath, KeyedHashAlgorithms algorithm, CryptoKey key)

O parâmetro opcional em encoding controla como a string de entrada é transcodificada para bytes antes KeyedHashText hash e assume como padrão UTF-8. KeyedHashBytes opera em bytes brutos e KeyedHashFile faz hash do conteúdo do arquivo byte a byte, portanto, nenhum dos dois tem um eixo de codificação.

Criptografia PGP

Se um signer for fornecido, a carga útil criptografada também será assinada com essa chave privada.

byte[] PgpEncryptBytes(byte[] input, PgpPublicKey recipient, PgpPrivateKey signer = null)

string PgpEncryptText(string input, PgpPublicKey recipient, PgpPrivateKey signer = null)

void PgpEncryptFile(string inputPath, string outputPath, PgpPublicKey recipient, PgpPrivateKey signer = null, bool overwrite = false)

Descriptografia PGP

Se um verifier for fornecido, a assinatura incorporada será verificada durante a descriptografia.

byte[] PgpDecryptBytes(byte[] input, PgpPrivateKey recipient, PgpPublicKey verifier = null)

string PgpDecryptText(string input, PgpPrivateKey recipient, PgpPublicKey verifier = null)

void PgpDecryptFile(string inputPath, string outputPath, PgpPrivateKey recipient, PgpPublicKey verifier = null, bool overwrite = false)

Assinatura PGP (assinatura binária)

Produz uma carga com assinatura em formato binário. Verifique-o com PgpVerify* métodos.

byte[] PgpSignBytes(byte[] input, PgpPrivateKey signer)

string PgpSignText(string input, PgpPrivateKey signer)

void PgpSignFile(string inputPath, string outputPath, PgpPrivateKey signer, bool overwrite = false)

Assinatura sem criptografia de PGP

As assinaturas sem criptografia mantêm o conteúdo original legível por humanos com a assinatura anexada. Verifique-os com PgpVerifyClearSigned* métodos.

byte[] PgpClearSignBytes(byte[] input, PgpPrivateKey signer)

string PgpClearSignText(string input, PgpPrivateKey signer)

void PgpClearSignFile(string inputPath, string outputPath, PgpPrivateKey signer, bool overwrite = false)

Verificação de PGP

Assinaturas binárias

Verifique as cargas produzidas pelos métodos PgpSign* (ou por PgpEncrypt* com um signatário).

MétodoAssinatura
Bytesbool PgpVerifyBytes(byte[] input, PgpPublicKey verifier)
Textobool PgpVerifyText(string input, PgpPublicKey verifier)
de transaçõesbool PgpVerifyFile(string inputPath, PgpPublicKey verifier)

Retorna true quando a assinatura é válida, e false caso contrário.

Assinaturas sem criptografia

Verifique as cargas produzidas pelos PgpClearSign* .

MétodoAssinatura
Bytesbool PgpVerifyClearSignedBytes(byte[] input, PgpPublicKey verifier)
Textobool PgpVerifyClearSignedText(string input, PgpPublicKey verifier)
de transaçõesbool PgpVerifyClearSignedFile(string inputPath, PgpPublicKey verifier)

Boa formatação da chave pública

Confirma que uma instância PgpPublicKey é analisada como uma chave pública OpenPGP bem formatada. Isso espelha o tipo de verificação Validate Public Key da atividade PGP Verify .

bool PgpVerifyPublicKey(PgpPublicKey key)

Retorna true quando a chave é válida.

Geração de pares de chaves PGP

Gera um par de chaves RSA OpenPGP na memória e retorna ambas as partes como um PgpKeyPair correspondente. Persiste chamando Save(path) em cada metade.

PgpKeyPair PgpGenerateKeys(string userId, string passphrase, RsaKeySize keySize = RsaKeySize.Rsa4096)

PgpKeyPair PgpGenerateKeys(string userId, SecureString passphrase, RsaKeySize keySize = RsaKeySize.Rsa4096)

Parâmetros:

  • userId (string) - O ID de usuário do OpenPGP; condicionalmente, uma caixa de correio RFC 2822, como Alice Doe <alice@example.com>.
  • passphrase - A frase secreta que protege a chave privada gerada. Vinculado ao PgpPrivateKey retornado.
  • keySize (RsaKeySize) - O tamanho da chave RSA. O padrão é Rsa4096. Rsa3072 e Rsa2048 são aceitos para interoperabilidade com sistemas legados.

Retorna um PgpKeyPair expondo pair.PublicKey e pair.PrivateKey.

Referência enumerada

EncryptionAlgorithm

Usado pelos métodos simétricos de criptografar e descriptografar.

ValorObservações
AESGCMAES-GCM com um nonce de 96 bits e uma tag de autenticação de 128 bits. AAD. Recomendado para novos fluxos de trabalho.
ChaCha20Poly1305ChaCha20-Poly1305 AAD. Não FIPS. Uma alternativa ao AES-GCM.
AESAES no modo CBC.
RijndaelRijndael no modo CBC. Obsoleto e fraco; evitar.
DESDES no modo CBC. Obsoleto e fraco; evitar.
TripleDES3DES no modo CBC. Obsoleto e fraco; evitar.
RC2RC2 no modo CBC. Obsoleto e fraco; evitar.
PGPReservado. Use os métodos dedicados PgpEncrypt* e PgpDecrypt* em vez disso.

SymmetricWireFormat

Usado por SymmetricEncryptOptions.Format e SymmetricDecryptOptions.Format.

ValorObservações
ClassicO layout estável de bytes da UiPath, RBKF2-HTAC-SHA1 em 10.000 iterações. Padrão. Convidado para compatibilidade com versões anteriores.
Owasp2026Layout clássico com a contagem de iterações recomendada pelo OWASP (1.300.000). O chamador pode substituí-lo por meio kdfIterations.
RawIV ‖ ciphertext [‖ tag]. O chamador fornece a chave literal (e, opcionalmente, o VM). Para interoperabilidade de terceiros.
OpenSslEncSalted__ ‖ salt(8) ‖ ciphertext [‖ tag], RBKPD2-HTAC-SHA256 em 600.000 iterações por padrão. Compatível com openssl enc -pbkdf2.

KeyedHashAlgorithms

Usado pelos métodos keyed-Hash.

ValorTipoObservações
HMACSHA256HMAC com chaveRecomendado para verificação de MAC e integridade.
HMACSHA384HMAC com chave
HMACSHA512HMAC com chave
SHA256Hash não chaveadoA chave é ignorada; equivalente a um hash SHA simples.
SHA384Hash não chaveadoA chave é ignorada.
SHA512Hash não chaveadoA chave é ignorada.
HMACSHA1HMAC com chaveObsoleto. SHA-1 está obsoleto pelo NIST; prefira SHA256 ou superior.
HMACMD5HMAC com chaveObsoleto. SDK5 está quebrado; evitar para qualquer uso confidencial.
SHA1Hash não chaveadoObsoleto. Os ataques de colagem são demonstrados; não use.

RsaKeySize

Usado por PgpGenerateKeys.

Valorbits
Rsa20482048
Rsa30723072
Rsa40964096 (padrão)

Padrões comuns

Criptografe e descriptografe uma string com AES-GCM (Clássico, o padrão)

[Workflow]
public void Execute()
{
    var key = PasswordKey.FromPassword("MySecretKey123!", Encoding.UTF8);

    var ciphertext = cryptography.EncryptText("Sensitive data", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
    Log($"Encrypted: {ciphertext}");

    var plaintext = cryptography.DecryptText(ciphertext, EncryptionAlgorithm.AESGCM, SymmetricDecryptOptions.Classic(key));
    Log($"Decrypted: {plaintext}");
}
[Workflow]
public void Execute()
{
    var key = PasswordKey.FromPassword("MySecretKey123!", Encoding.UTF8);

    var ciphertext = cryptography.EncryptText("Sensitive data", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
    Log($"Encrypted: {ciphertext}");

    var plaintext = cryptography.DecryptText(ciphertext, EncryptionAlgorithm.AESGCM, SymmetricDecryptOptions.Classic(key));
    Log($"Decrypted: {plaintext}");
}

Criptografar com uma chave bruta fornecida pelo chamador e IV (interoperabilidade de terceiros)

[Workflow]
public void Execute()
{
    // 32 bytes for AES-256
    byte[] rawKeyBytes = Convert.FromBase64String("your-base64-encoded-32-byte-key==");
    byte[] iv          = Convert.FromHexString("a3f1b2c4d5e6f70819a0b1c2d3e4f506");

    var key = RawKey.FromBytes(rawKeyBytes);

    byte[] cipher = cryptography.EncryptBytes(
        Encoding.UTF8.GetBytes("payload"),
        EncryptionAlgorithm.AESGCM,
        SymmetricEncryptOptions.Raw(key, iv));

    // Decrypt. The IV is read from the ciphertext stream prefix, so there is no need to pass it again.
    byte[] plain = cryptography.DecryptBytes(
        cipher,
        EncryptionAlgorithm.AESGCM,
        SymmetricDecryptOptions.Raw(key));
}
[Workflow]
public void Execute()
{
    // 32 bytes for AES-256
    byte[] rawKeyBytes = Convert.FromBase64String("your-base64-encoded-32-byte-key==");
    byte[] iv          = Convert.FromHexString("a3f1b2c4d5e6f70819a0b1c2d3e4f506");

    var key = RawKey.FromBytes(rawKeyBytes);

    byte[] cipher = cryptography.EncryptBytes(
        Encoding.UTF8.GetBytes("payload"),
        EncryptionAlgorithm.AESGCM,
        SymmetricEncryptOptions.Raw(key, iv));

    // Decrypt. The IV is read from the ciphertext stream prefix, so there is no need to pass it again.
    byte[] plain = cryptography.DecryptBytes(
        cipher,
        EncryptionAlgorithm.AESGCM,
        SymmetricDecryptOptions.Raw(key));
}

Descriptografar um arquivo produzido por openssl enc

[Workflow]
public void Execute()
{
    // openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -md sha256 -salt -k password -in plain.txt -out cipher.bin
    var key = PasswordKey.FromPassword("password", Encoding.UTF8);

    cryptography.DecryptFile(
        inputPath:  @"C:\Documents\cipher.bin",
        outputPath: @"C:\Documents\plain.txt",
        algorithm:  EncryptionAlgorithm.AES,
        options:    SymmetricDecryptOptions.OpenSslEnc(key),
        overwrite:  true);
}
[Workflow]
public void Execute()
{
    // openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -md sha256 -salt -k password -in plain.txt -out cipher.bin
    var key = PasswordKey.FromPassword("password", Encoding.UTF8);

    cryptography.DecryptFile(
        inputPath:  @"C:\Documents\cipher.bin",
        outputPath: @"C:\Documents\plain.txt",
        algorithm:  EncryptionAlgorithm.AES,
        options:    SymmetricDecryptOptions.OpenSslEnc(key),
        overwrite:  true);
}

Use uma contagem de iterações de KPD mais forte (Owasp2026)

[Workflow]
public void Execute()
{
    var key = PasswordKey.FromPassword("MySecretKey", Encoding.UTF8);

    // Owasp2026(key) defaults to kdfIterations = 1_300_000 (the OWASP 2026 recommendation).
    var ciphertext = cryptography.EncryptBytes(
        Encoding.UTF8.GetBytes("payload"),
        EncryptionAlgorithm.AESGCM,
        SymmetricEncryptOptions.Owasp2026(key));

    // Decrypt must use the same iteration count. Owasp2026 does not store it in the wire format.
    byte[] plain = cryptography.DecryptBytes(
        ciphertext,
        EncryptionAlgorithm.AESGCM,
        SymmetricDecryptOptions.Owasp2026(key));
}
[Workflow]
public void Execute()
{
    var key = PasswordKey.FromPassword("MySecretKey", Encoding.UTF8);

    // Owasp2026(key) defaults to kdfIterations = 1_300_000 (the OWASP 2026 recommendation).
    var ciphertext = cryptography.EncryptBytes(
        Encoding.UTF8.GetBytes("payload"),
        EncryptionAlgorithm.AESGCM,
        SymmetricEncryptOptions.Owasp2026(key));

    // Decrypt must use the same iteration count. Owasp2026 does not store it in the wire format.
    byte[] plain = cryptography.DecryptBytes(
        ciphertext,
        EncryptionAlgorithm.AESGCM,
        SymmetricDecryptOptions.Owasp2026(key));
}

Calcule um HMAC-SHA256 para verificação de integridade de dados

[Workflow]
public void Execute()
{
    byte[] hmacKey = Convert.FromBase64String("your-base64-hmac-key==");
    var key = RawKey.FromBytes(hmacKey);

    // Keyed-hash methods take a CryptoKey directly. There is no options object, because there is no wire-format axis.
    var digest = cryptography.KeyedHashText("payload to verify", KeyedHashAlgorithms.HMACSHA256, key);
    Log($"HMAC-SHA256: {digest}");
}
[Workflow]
public void Execute()
{
    byte[] hmacKey = Convert.FromBase64String("your-base64-hmac-key==");
    var key = RawKey.FromBytes(hmacKey);

    // Keyed-hash methods take a CryptoKey directly. There is no options object, because there is no wire-format axis.
    var digest = cryptography.KeyedHashText("payload to verify", KeyedHashAlgorithms.HMACSHA256, key);
    Log($"HMAC-SHA256: {digest}");
}

O PGP criptografa e assina, depois descriptografa e verifica

[Workflow]
public void Execute()
{
    var recipientPublic = PgpPublicKey.FromFilePath(@"C:\Keys\recipient_public.asc");
    var senderPrivate   = PgpPrivateKey.FromFilePath(@"C:\Keys\sender_private.asc", "senderPassphrase");

    // Passing a signer to PgpEncrypt* implies sign-and-encrypt.
    byte[] encrypted = cryptography.PgpEncryptBytes(
        Encoding.UTF8.GetBytes("Signed and encrypted message"),
        recipientPublic,
        signer: senderPrivate);

    var recipientPrivate = PgpPrivateKey.FromFilePath(@"C:\Keys\recipient_private.asc", "recipientPassphrase");
    var senderPublic     = PgpPublicKey.FromFilePath(@"C:\Keys\sender_public.asc");

    // Passing a verifier to PgpDecrypt* implies verify-while-decrypting.
    byte[] decrypted = cryptography.PgpDecryptBytes(
        encrypted,
        recipientPrivate,
        verifier: senderPublic);

    Log(Encoding.UTF8.GetString(decrypted));
}
[Workflow]
public void Execute()
{
    var recipientPublic = PgpPublicKey.FromFilePath(@"C:\Keys\recipient_public.asc");
    var senderPrivate   = PgpPrivateKey.FromFilePath(@"C:\Keys\sender_private.asc", "senderPassphrase");

    // Passing a signer to PgpEncrypt* implies sign-and-encrypt.
    byte[] encrypted = cryptography.PgpEncryptBytes(
        Encoding.UTF8.GetBytes("Signed and encrypted message"),
        recipientPublic,
        signer: senderPrivate);

    var recipientPrivate = PgpPrivateKey.FromFilePath(@"C:\Keys\recipient_private.asc", "recipientPassphrase");
    var senderPublic     = PgpPublicKey.FromFilePath(@"C:\Keys\sender_public.asc");

    // Passing a verifier to PgpDecrypt* implies verify-while-decrypting.
    byte[] decrypted = cryptography.PgpDecryptBytes(
        encrypted,
        recipientPrivate,
        verifier: senderPublic);

    Log(Encoding.UTF8.GetString(decrypted));
}

Gere um novo par de chaves PGP

[Workflow]
public void Execute()
{
    PgpKeyPair pair = cryptography.PgpGenerateKeys(
        userId:     "Alice <alice@example.com>",
        passphrase: "StrongPassphrase!",
        keySize:    RsaKeySize.Rsa4096);

    pair.PublicKey.Save(@"C:\Keys\my_public.asc");
    pair.PrivateKey.Save(@"C:\Keys\my_private.asc");

    Log("Key pair generated.");
}
[Workflow]
public void Execute()
{
    PgpKeyPair pair = cryptography.PgpGenerateKeys(
        userId:     "Alice <alice@example.com>",
        passphrase: "StrongPassphrase!",
        keySize:    RsaKeySize.Rsa4096);

    pair.PublicKey.Save(@"C:\Keys\my_public.asc");
    pair.PrivateKey.Save(@"C:\Keys\my_private.asc");

    Log("Key pair generated.");
}

Validar uma chave pública de entrada antes de armazená-la

[Workflow]
public void Execute()
{
    // Armored public key arriving as text from an HTTP response or config.
    string armoredPublicKey = LoadFromInbox();
    var candidate = PgpPublicKey.FromBytes(Encoding.UTF8.GetBytes(armoredPublicKey));

    if (!cryptography.PgpVerifyPublicKey(candidate))
    {
        throw new InvalidOperationException("Supplied content is not a valid OpenPGP public key.");
    }

    candidate.Save(@"C:\Keys\trusted_public.asc");
}
[Workflow]
public void Execute()
{
    // Armored public key arriving as text from an HTTP response or config.
    string armoredPublicKey = LoadFromInbox();
    var candidate = PgpPublicKey.FromBytes(Encoding.UTF8.GetBytes(armoredPublicKey));

    if (!cryptography.PgpVerifyPublicKey(candidate))
    {
        throw new InvalidOperationException("Supplied content is not a valid OpenPGP public key.");
    }

    candidate.Save(@"C:\Keys\trusted_public.asc");
}

Esta página foi útil?

Conectar

Precisa de ajuda? Suporte

Quer aprender? Academia UiPath

Tem perguntas? Fórum do UiPath

Fique por dentro das novidades