Pular para o conteúdo

DBMS_CRYPTO: Criptografia e Descriptografia no Oracle

DBMS_CRYPTO: Criptografia e Descriptografia no Oracle

A criptografia é o processo de converter dados em um formato cifrado para evitar acesso não autorizado, enquanto a descriptografia é o processo de reverter o dado cifrado de volta ao seu formato original. O Oracle fornece um pacote chamado DBMS_CRYPTO para suportar essas operações.

Visão Geral do DBMS_CRYPTO

O pacote DBMS_CRYPTO é parte do Oracle Advanced Security Option e permite aos desenvolvedores PL/SQL criptografar e descriptografar dados, gerar hashes e valores aleatórios.

Métodos de Criptografia Suportados

  • AES (Advanced Encryption Standard) com chaves de 128, 192 e 256 bits.
  • DES (Data Encryption Standard) e Triple DES.
  • RC2 e RC4.

Exemplos Práticos

Criptografia e Descriptografia de uma Senha

Suponha que temos uma aplicação que precisa armazenar senhas de forma segura. Em vez de armazenar a senha em texto simples, a aplicação criptografará a senha antes de armazená-la.

DECLARE
  chave RAW(128) := UTL_I18N.STRING_TO_RAW('chave_secreta');
  senha_plaintext VARCHAR2(50) := 'SenhaSegura123';
  senha_cifrada RAW(128);
BEGIN
  -- Criptografando a senha
  senha_cifrada := DBMS_CRYPTO.ENCRYPT(
      src => UTL_I18N.STRING_TO_RAW(senha_plaintext),
      typ => DBMS_CRYPTO.ENCRYPTION_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
      key => chave
  );

  DBMS_OUTPUT.PUT_LINE('Senha cifrada: ' || RAWTOHEX(senha_cifrada));

  -- Descriptografando a senha
  senha_plaintext := UTL_I18N.RAW_TO_CHAR(
      DBMS_CRYPTO.DECRYPT(
          src => senha_cifrada,
          typ => DBMS_CRYPTO.ENCRYPTION_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
          key => chave
      )
  );

  DBMS_OUTPUT.PUT_LINE('Senha descriptografada: ' || senha_plaintext);
END;
/
Senha cifrada: A1B2C3D4E5F67890A1B2C3D4E5F67890
Senha descriptografada: SenhaSegura123

Criptografia e Descriptografia de Informações de Cartão de Crédito

Em um cenário de e-commerce, pode ser necessário armazenar informações de cartões de crédito de forma segura.

DECLARE
  chave RAW(128) := UTL_I18N.STRING_TO_RAW('outra_chave_secreta');
  cc_plaintext VARCHAR2(16) := '1234567890123456'; -- Exemplo de número de cartão
  cc_cifrada RAW(128);
BEGIN
  -- Criptografando o número do cartão
  cc_cifrada := DBMS_CRYPTO.ENCRYPT(
      src => UTL_I18N.STRING_TO_RAW(cc_plaintext),
      typ => DBMS_CRYPTO.ENCRYPTION_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
      key => chave
  );

  DBMS_OUTPUT.PUT_LINE('Cartão cifrado: ' || RAWTOHEX(cc_cifrada));

  -- Descriptografando o número do cartão
  cc_plaintext := UTL_I18N.RAW_TO_CHAR(
      DBMS_CRYPTO.DECRYPT(
          src => cc_cifrada,
          typ => DBMS_CRYPTO.ENCRYPTION_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
          key => chave
      )
  );

  DBMS_OUTPUT.PUT_LINE('Cartão descriptografado: ' || cc_plaintext);
END;
/
Cartão cifrado: ABCDEF1234567890ABCDEF1234567890
Cartão descriptografado: 1234567890123456

Considerações

  • Chaves de Criptografia: A chave utilizada na criptografia é essencial. É fundamental manter a chave em um local seguro e não expô-la.
  • Desempenho: Criptografar e descriptografar dados pode ser uma operação intensiva. É crucial testar o desempenho, especialmente ao lidar com grandes volumes de dados.
  • Atualizações de Segurança: Fique atento às atualizações de segurança da Oracle, pois novos métodos de criptografia podem ser adicionados, e os antigos podem se tornar obsoletos.

Espero que esse artigo seja útil na sua busca pelo conhecimento sobre criptografia no Oracle.

Abs

Referências

  • Documentação oficial da Oracle para o pacote DBMS_CRYPTO: Oracle Docs
Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress