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