Aqui estou dando um exemplo para criptografar a senha no Oracle usando o pacote DBMS_CRYPTO.
Para demonstrar isso, criei a tabela a seguir para armazenar o tipo de dados varchar2 ID do usuário (USER_ID) e para armazenar o tipo de dados brutos de senha criptografada (ENC_PSW).
Criar tabela
SET DEFINE OFF; CREATE TABLE ENC_DATA ( USER_ID VARCHAR2(20 BYTE), ENC_PSW RAW(2000) ) / ALTER TABLE ENC_DATA ADD ( CONSTRAINT ENC_DATA_PK PRIMARY KEY (USER_ID)) /
Um exemplo para criptografar senha no Oracle
Agora através do seguinte programa PL/SQL, vamos armazenar a senha mypassword123 para o ID de usuário SCOTT . A chave é a parte vital para a criptografia porque para descriptografá-la você precisa usar a mesma chave. Você pode usar qualquer tecla alfanumérica de 16 caracteres. Para obter mais informações sobre o pacote DBMS_CRYPTO consulte a Documentação do Oracle.
SET SERVEROUTPUT ON; DECLARE l_user_id enc_data.USER_ID%TYPE := 'SCOTT'; l_user_psw VARCHAR2 (2000) := 'mypassword123'; l_key VARCHAR2 (2000) := '1234567890999999'; l_mod NUMBER := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_enc RAW (2000); BEGIN l_user_psw := DBMS_CRYPTO.encrypt (UTL_I18N.string_to_raw (l_user_psw, 'AL32UTF8'), l_mod, UTL_I18N.string_to_raw (l_key, 'AL32UTF8')); DBMS_OUTPUT.put_line ('Encrypted=' || l_user_psw); INSERT INTO enc_data (user_id, enc_psw) VALUES (l_user_id, l_user_psw); COMMIT; END; /
Saída
Encrypted=132BEDB1C2CDD8F23B5A619412C27B60 PL/SQL procedure successfully completed.
Verifique os dados na tabela ENC_DATA:
SELECT * FROM enc_data;
USER_ID ENC_PSW SCOTT 132BEDB1C2CDD8F23B5A619412C27B60
No exemplo acima, ele criptografou a senha para o ID do usuário SCOTT e armazenou na tabela enc_data. Agora abaixo está o programa PL/SQL para buscar a senha e descriptografá-la.
Um exemplo para descriptografar a senha no Oracle
SET SERVEROUTPUT ON; DECLARE l_user_id enc_data.user_id%TYPE := 'SCOTT'; l_user_psw RAW (2000); l_key VARCHAR2 (2000) := '1234567890999999'; l_mod NUMBER := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_dec RAW (2000); BEGIN SELECT enc_psw INTO l_user_psw FROM enc_data WHERE user_id = l_user_id; l_dec := DBMS_CRYPTO.decrypt (l_user_psw, l_mod, UTL_I18N.STRING_TO_RAW (l_key, 'AL32UTF8')); DBMS_OUTPUT.put_line ('Decrypted=' || UTL_I18N.raw_to_char (l_dec)); END; /
Saída
Decrypted=mypassword123 PL/SQL procedure successfully completed.
Veja também:
- Como ocultar a senha no Oracle Forms?
- Alterar a senha do usuário Sys no Oracle