Árvore de páginas

Versões comparadas

Chave

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

...

JSON Web Encryption (JWE) é um padrão que define uma maneira compacta e independente de transmitir informações seguras como um objeto JSON.
A principal funcionalidade do JWE é permitir a criptografia de conteúdo, garantindo a confidencialidade dos dados. 

Informações

Este padrão é útil em contextos onde é necessário garantir a integridade e a confidencialidade das informações, como em transações financeiras ou dados sensíveis.
Para maiores informações, recomenda-se a leitura da RFC: https://datatracker.ietf.org/doc/html/rfc7516

Exemplo

...

 

...

Bloco de código
User Function testjwe()

...


  // Variáveis para armazenar a chave JWK RSA e o texto a ser criptografado

...


  Local jwkRsa

...


  Local plainText := "Texto a ser criptografado"

...



  // Definindo a chave JWK RSA em formato JSON

...


  jwkRsa := '{"kty": "RSA","n":"oahUIoWw0K0usKNuOR6H4wkf4oBUXHTxRvgb48E-BVvxkeDNjbC4he8rUWcJoZmds2h7M70imEVhRU5djINXtqllXI4DFqcI1DgjT9LewND8MW2Krf3Spsk_ZkoFnilakGygTwpZ3uesH-PFABNIUYpOiN15dsQRkgr0vEhxN92i2asbOenSZeyaxziK72UwxrrKoExv6kc5twXTq4h-QChLOln0_mtUZwfsRaMStPs6mS6XrgxnxbWhojf663tuEQueGC-FCMfra36C9knDFGzKsNa7LZK2djYgyD3JR_MB_4NUJW_TqOQtwHYbxevoJArm-L5StowjzGy-_bq6Gw","e": "AQAB","d":"kLdtIj6GbDks_ApCSTYQtelcNttlKiOyPzMrXHeI-yk1F7-kpDxY4-WY5NWV5KntaEeXS1j82E375xxhWMHXyvjYecPT9fpwR_M9gV8n9Hrh2anTpTD93Dt62ypW3yDsJzBnTnrYu1iwWRgBKrEYY46qAZIrA2xAwnm2X7uGR1hghkqDp0Vqj3kbSCz1XyfCs6_LehBwtxHIyh8Ripy40p24moOAbgxVw3rxT_vlt3UVe4WO3JkJOzlpUf-KTVI2Ptgm-dARxTEtE-id-4OJr0h-K-VFs3VSndVTIznSxfyrj8ILL6MG_Uv8YAu7VILSB3lOW085-4qE3DzgrTjgyQ","p": "1r52Xk46c-LsfB5P442p7atdPUrxQSy4mti_tZI3Mgf2EuFVbUoDBvaRQ-SWxkbkmoEzL7JXroSBjSrK3YIQgYdMgyAEPTPjXv_hI2_1eTSPVZfzL0lffNn03IXqWF5MDFuoUYE0hzb2vhrlN_rKrbfDIwUbTrjjgieRbwC6Cl0","q":"wLb35x7hmQWZsWJmB_vle87ihgZ19S8lBEROLIsZG4ayZVe9Hi9gDVCOBmUDdaDYVTSNx_8Fyw1YYa9XGrGnDew00J28cRUoeBB_jKI1oma0Orv1T9aXIWxKwd4gvxFImOWr3QRL9KEBRzk2RatUBnmDZJTIAfwTs0g68UZHvtc","dp":"ZK-YwE7diUh0qR1tR7w8WHtolDx3MZ_OTowiFvgfeQ3SiresXjm9gZ5KLhMXvo-uz-KUJWDxS5pFQ_M0evdo1dKiRTjVw_x4NyqyXPM5nULPkcpU827rnpZzAJKpdhWAgqrXGKAECQH0Xt4taznjnd_zVpAmZZq60WPMBMfKcuE","dq":"Dq0gfgJ1DdFGXiLvQEZnuKEN0UUmsJBxkjydc3j4ZYdBiMRAy86x0vHCjywcMlYYg4yoC4YZa9hNVcsjqA3FeiL19rk8g6Qn29Tt0cj8qqyFpz9vNDBUfCAiJVeESOjJDZPYHdHY8v1b-o-Z2X5tvLx-TCekf7oxyeKDUqKWjis","qi":"VIMpMYbPf47dT1w_zDUXfPimsSegnMOA1zTaX7aGk_8urY6R8-ZW1FxU7AlWAyLWybqq6t16VFd7hQd0y6flUK4SlOydB61gwanOsXGOAOv82cHq0E3eL4HrtZkUuKvnPrMnsUUFlfUdybVzxyjz9JF_XyaY14ardLSjf4L_FNY"}'

...



  // Função para criptografar e descriptografar texto usando RSA-OAEP e A256GCM

...


  u_encryptRsaOaepAndAesGcm(jwkRsa, plainText)

...



Return

...



User Function encryptRsaOaepAndAesGcm(jwkRsa, plainText)

...


  Local tokenJWE := ""

...


  Local plainTextDecrypted := ""

...


  Local oTokenJWE := Nil

...



  // Criando uma instância da classe JWE

...


  oTokenJWE:= tJWE():New()

...



  // Importando a chave JWK RSA para o objeto JWE

...


  oTokenJWE:importKeyJWK(jwkRsa, LEN(jwkRsa))

...


  

...


  // Configurando um novo cabeçalho JWE

...


  oTokenJWE:newHeader()

...



  // Definindo algoritmos de criptografia no cabeçalho JWE

...


  oTokenJWE:setHeader("alg","RSA-OAEP")

...


  oTokenJWE:setHeader("enc","A256GCM")

...



  // Criptografando o texto

...


  oTokenJWE:encrypt(plainText) 

...



  // Obtendo o token JWE criptografado

...


  tokenJWE := oTokenJWE:getToken()

...



  // Verificando erros e exibindo o token JWE criptografado

...


  if (Len(tokenJWE) == 0)

...


    conout("Erro na criptografia do token. Error: "+ oTokenJWE:getLastError())

...


  end if

...


  conout("Token gerado: " + tokenJWE)

...



  // Deserializando token JWE

...


  oTokenJWE:deserializeJWE()  

...



  // Descriptografando o token JWE

...


  plainTextDecrypted := oTokenJWE:decrypt() 

...



  // Verificando erros na descriptografia e exibindo o texto descriptografado

...


  if (Len(plainTextDecrypted) == 0)

...


    conout("Erro na descriptografia do token. Error: "+ oTokenJWE:getLastError())

...


  end if

...


  conout("Token Descriptografado: " + plainTextDecrypted)    

...



  // Liberando o objeto JWE

...


  oTokenJWE:release()

...


  FreeObj(oTokenJWE)    

...



Return
 
Abrangência

20.3.2.4


...

Construtores

...

NomeTipoDescrição
oObjobjectNova instância da classe tJWE 
Exemplos

...

Bloco de código
  Local oTokenJWE:= tJWE():New()

...


...

Métodos

A classe expõe os seguintes métodos:

...

NomeTipoDescriçãoObrigatórioReferência
cJwkcharacterRepresentação da chave no formato JSON Web Key.X
nKeyLengthnumericIndica o tamanho da chave.X
Exemplos
Bloco de código
 

...

 

...

oTokenJWE:importKeyJWK(jwkRsa, LEN(jwkRsa))

...

newHeader

Cria um novo cabeçalho JWE para a instância atual do objeto tJWE.

Sintaxe
newHeader()
Exemplos
Bloco de código
 

...

 

...

oTokenJWE:newHeader()

...

setHeader

Define um par chave-valor no cabeçalho JWE.

...

NomeTipoDescriçãoObrigatórioReferência
cAttrcharacterO nome do atributo a ser definido no cabeçalho JWE.X
cValuecharacterO valor correspondente ao atributo no cabeçalho JWE.X
Exemplos
Bloco de código

...

  oTokenJWE:setHeader("alg","RSA-OAEP")

...


 

...

 oTokenJWE:setHeader("enc","A256GCM") 

...

encrypt

Criptografa o texto fornecido e armazena o resultado no token JWE.

...

NomeTipoDescriçãoObrigatórioReferência
cPlainTextcharacter

O texto a ser criptografado.

X
Exemplos
Bloco de código

...

  oTokenJWE:encrypt("Texto a ser criptografado")

...

getToken

Retorna o token JWE criptografado.

...

RetornoTipoDescrição
cRetcharacterRetorna uma string que representa o token JWE criptografado.
Exemplos

...

Bloco de código
  tokenJWE := oTokenJWE:getToken()

...

deserializeJWE

Prepara o token JWE criptografado para descriptografia.

Sintaxe
deserializeJWE()
Exemplos
Bloco de código

...

  oTokenJWE:deserializeJWE()

...

decrypt

Descriptografa o token JWE e retorna o texto original.

...

RetornoTipoDescrição
cRetcharacterRetorna uma string que representa o texto descriptografado.
Exemplos
Bloco de código
 

...

 plainTextDecrypted 

...

:= oTokenJWE:decrypt()

...

getLastError

Obtem o registro de erro da última operação executada sem sucesso

...

RetornoTipoDescrição
cRetcharacterRetorna uma string que descreve o último erro ocorrido.
Exemplos

...

Bloco de código
  conout("Erro: "+ oTokenJWE:getLastError())

...

release

Libera os recursos alocados pelo objeto tJWE.

Sintaxe
release()
Exemplos

...

Bloco de código
  oTokenJWE:release()