Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
collapsefalse
AESDecrypt( < nCipherID >, < cCipherText >, < cKey >, [ cIV ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

nCipherID

numérico

Código identificador do modo do algoritmo AES a ser usado na decriptação.

X


cCipherText

caractere

Texto de entrada a ser decriptado.

X


cKey

caractere

Key da decriptação, conforme o modo do algoritmo AES a ser usado.

X


cIV

caractere

IV (Vetor de Inicialização) da decriptação, conforme o modo do algoritmo AES a ser usado. Obrigatório para o modo CBC.



Retorno

Nome

Tipo

Descrição

aResDec

vetor

Array com o resultado do processo de decriptação.

Informações
icontrue
titleObservações


  • Modos do algoritmo AES suportados: a partir dos modos do algoritmo AES suportados, são definidos os códigos identificadores, os tamanho da Key e do IV e a obrigatoriedade do uso do IV:

    Modo do algoritmo AES

    Código Identificador

    Tamanho da Key (em bytes)

    Tamanho do IV (em bytes)

    IV Usado

    AES-128 CBC

    0

    16

    16

    Sim

    AES-192 CBC

    1

    24

    16

    Sim

    AES-256 CBC

    2

    32

    16

    Sim


  • Sobre o uso de keys fornecidas: caso sejam utilizadas ao utilizar keys fornecidas, por razões de segurança da informação, recomenda-se:
    • somente usar keys derivadas a partir de algoritmos apropriados e com componente randômico;
    • não repetir a mesma key para diferentes textos de entrada.


  • Sobre o uso de ivs fornecidos: para o modo CBC, caso sejam utilizados ao utilizar ivs fornecidos, por razões de segurança da informação, recomenda-se:
    • uso obrigatório de ivs para o modo CBC.
    • somente usar ivs gerados randomicamente.


  • Formato e conteúdo da array com o resultado da decriptação:

    Índice

    Nome

    Tipo

    Descrição

    Conteúdo

    1

    nResultCode

    numérico

    Código identificador do resultado da decriptação.

    0 (zero) em caso de sucesso ou diferente de 0 (zero) em caso de erro.

    2

    cPlainText

    caractere

    Texto de saída resultado da decriptação.

    Texto da entrada decriptado no modo definido em caso de sucesso ou vazio em caso de erro.


  • Códigos identificadores do resultado da decriptação:

    Código

    Significado

    0

    Sucesso.

    1

    Erro de código identificador do modo do algoritmo de criptografia inválido.

    2

    Erro de comprimento da key fornecida é inválido para o modo definido.

    3

    Erro de comprimento do iv fornecido é inválido para o modo definido.

    4

    Erro de geração da key: erro gerando o salt.

    5

    Erro de geração da key: erro derivando a key.

    6

    Erro de geração do iv: erro gerando o iv.

    7

    Erro de texto encriptado vazio.

    8

    Erro de encriptação: o conteúdo de um ou mais dos parâmetros de entrada não corresponde ao esperado.

    9

    Erro de decriptação: o conteúdo de um ou mais dos parâmetros de entrada não corresponde ao esperado.

    10

    Erro de código de erro desconhecido.


Exemplos

  • Exemplo 1: criptografia AES-128 CBC usando key gerada a partir do password fornecido e IV gerado randômico:

    Bloco de código
    languagecpp
    themeEclipse
    linenumberstrue
    collapsefalse
    User Function ExeAES1()
    
      Local nCipherID   := 0                    // AES-128 CBC
      Local cPlainText  := "input<Texto plainde textentrada>"
      Local cPassword   := "password"
    //Local cKeyInput   := "1234567890123456"   // NÃO USAR: APENAS PARA EXEMPLO!!!
    //Local cIVInput    := "6543210987654321"   // NÃO USAR: APENAS PARA EXEMPLO!!!<Texto auxiliar na geração da key da encriptação>"
      Local cKeyUsed    := ""
      Local cIVUsed     := ""
      Local cCipherText := ""
      Local aResEnc     := {}
      Local aResDec     := {}
    
      aResEnc := AESEncrypt( nCipherID, cPlainText, cPassword )
      
      VarInfo( "AESEncrypt", aResEnc )
    
      // AESEncrypt -> ARRAY (    4) [...]
      //      AESEncrypt[1] -> N (   15) [         0.0000]
      //      AESEncrypt[2] -> C (   32) [<texto_ascii_com_32_bytes><Texto de saída da encriptação>]
      //      AESEncrypt[3] -> C (   16) [<texto_ascii_com_16_bytes><Key usada na encriptação, derivada a partir do password pela função de encriptação>]
      //      AESEncrypt[4] -> C (   16) [<texto_ascii_com_16_bytes><IV usado na encriptação, gerado randomicamente pela função de encriptação>]
    
      cCipherText := aResEnc[2]
      cKeyUsed    := aResEnc[3]
      cIVUsed     := aResEnc[4]
    
      aResDec := AESDecrypt( nCipherID, cCipherText, cKeyUsed, cIVUsed )
      
      VarInfo( "AESDecrypt", aResDec )
    
      // AESDecrypt -> ARRAY (    2) [...]
      //      AESDecrypt[1] -> N (   15) [         0.0000]
      //      AESDecrypt[2] -> C (   16) [input plain text<Texto de saída da decriptação, idêntico ao texto de entrada>]
    
    Return
    
  • Exemplo 2: criptografia AES-128 CBC usando key fornecida e IV fornecido:

    Bloco de código
    languagecpp
    themeEclipse
    linenumberstrue
    collapsefalse
    User Function ExeAES2()
    
      Local nCipherID   := 0                    // AES-128 CBC
      Local cPlainText  := "input<Texto plain text"
    //Local cPassword   := "passwordde entrada>"
      Local cKeyInput   := "1234567890123456"   // NÃO USAR: APENAS PARA EXEMPLO!!!<Key a ser usada na encriptação e na decriptação, gerada previamente>"
      Local cIVInput    := "6543210987654321"   // NÃO USAR: APENAS PARA EXEMPLO!!!<IV a ser usado na encriptação e na decriptação, gerado previamente>"
      Local cKeyUsed    := ""
      Local cIVUsed     := ""
      Local cCipherText := ""
      Local aResEnc     := {}
      Local aResDec     := {}
    
      aResEnc := AESEncrypt( nCipherID, cPlainText, , cKeyInput, cIVInput )
      
      VarInfo( "AESEncrypt", aResEnc )
    
      // AESEncrypt -> ARRAY (    4) [...]
      //      AESEncrypt[1] -> N (   15) [         0.0000]
      //      AESEncrypt[2] -> C (   32) [<texto_ascii_com_32_bytes><Texto de saída da encriptação>]
      //      AESEncrypt[3] -> C (   16) [1234567890123456<Key usada na encriptação, gerada previamente>]
      //      AESEncrypt[4] -> C (   16) [6543210987654321<IV usado na encriptação, gerado previamente>]
    
      cCipherText := aResEnc[2]
      cKeyUsed    := aResEnc[3]
      cIVUsed     := aResEnc[4]
    
      aResDec := AESDecrypt( nCipherID, cCipherText, cKeyUsed, cIVUsed )
      
      VarInfo( "AESDecrypt", aResDec )
    
      // AESDecrypt -> ARRAY (    2) [...]
      //      AESDecrypt[1] -> N (   15) [         0.0000]
      //      AESDecrypt[2] -> C (   16) [input plain text<Texto de saída da decriptação, idêntico ao texto de entrada>]
    
    Return
    

Abrangência

Disponível no AppServer a partir da build 17.3.0.1615

Veja também