1)DBMS_OBFUSCATION_TOOLKIT package:
Encryption Function:
SQL> CREATE OR REPLACE FUNCTION encrypt (p_text IN VARCHAR2, p_key VARCHAR2 )
RETURN RAW
IS
lc_text VARCHAR2(32767) := p_text;
lr_key RAW(255) := UTL_RAW.cast_to_raw(p_key);
lt_enc_text RAW(32767);
BEGIN
lc_text := RPAD( lc_text, (TRUNC(LENGTH(lc_text)/8)+1)*8, CHR(0) );
DBMS_OBFUSCATION_TOOLKIT.desencrypt(input => UTL_RAW.cast_to_raw(lc_text),
key => lr_key,
encrypted_data => lt_enc_text);
RETURN lt_enc_text;
END;
/
Function created.
SQL> SELECT ENCRYPT('HELLO WORLD !','1234567890') from dual;
ENCRYPT('HELLOWORLD!','1234567890')
----------------------------------------------
F9D853C25CAB740D930D7DCA709D0994
SQL>
Decryption Function:
SQL> CREATE OR REPLACE FUNCTION decrypt (p_raw IN RAW, p_key VARCHAR2 )
RETURN VARCHAR2 IS
lc_decrypted VARCHAR2(32767);
lc_return_dec VARCHAR2(32767);
lr_key RAW(255) := UTL_RAW.cast_to_raw(p_key);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.desdecrypt(input => p_raw,
key => lr_key,
decrypted_data => lc_decrypted);
lc_return_dec := UTL_RAW.cast_to_varchar2(lc_decrypted);
RETURN RTRIM( lc_return_dec, CHR(0) );
END;
/
Function created.
SQL> SELECT decrypt('F9D853C25CAB740D930D7DCA709D0994','1234567890')
FROM dual;
DECRYPT('F9D853C25CAB740D930D7DCA709D0994','1234567890')
--------------------------------------------------------------
HELLO WORLD !
2) DBMS_CRYPTO Package:
set serveroutput on;
DECLARE
l_text VARCHAR2(32767) :='1234-5678-9012-3456';
l_key RAW(128) := UTL_I18N.STRING_TO_RAW('0123456789', 'AL32UTF8');
l_encrypted_raw RAW(2048);
l_decrypted_raw RAW(2048);
BEGIN
dbms_output.put_line('Original : ' || l_text );
l_encrypted_raw := dbms_crypto.encrypt(
src => UTL_I18N.STRING_TO_RAW (l_text , 'AL32UTF8'),
typ => dbms_crypto.des_cbc_pkcs5,
key => l_key
);
dbms_output.put_line('Encrypted ( CHAR ) : ' ||
UTL_I18N.RAW_TO_CHAR(l_encrypted_raw, 'AL32UTF8'));
dbms_output.put_line('Encrypted ( HEX ) : ' ||
RAWTOHEX(l_encrypted_raw));
l_decrypted_raw := dbms_crypto.decrypt(
src => l_encrypted_raw,
typ => dbms_crypto.des_cbc_pkcs5,
key => l_key);
dbms_output.put_line('Decrypted : '||
UTL_I18N.RAW_to_CHAR(l_decrypted_raw,'AL32UTF8'));
END;
/
Original : 1234-5678-9012-3456
Encrypted ( CHAR ) : .n?k.z????L??E??AmdM
Encrypted ( HEX ) : 2E1F6EAE186B2E7A9DBCFA834C3FBD45A6B0C3806D64044D
Decrypted : 1234-5678-9012-3456
PL/SQL procedure successfully completed.
DBMS_CRYPTO Block Cipher Suites
| Name | Description |
|---|---|
DES_CBC_PKCS5 | ENCRYPT_DES + CHAIN_CBC+ PAD_PKCS5 |
DES3_CBC_PKCS5 | ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5 |