Document Type | Technical Information
Category | App Development
Applicable Product Versions | 6FS06, 6FS07, 7FS02
Document Number | TDETI001
Overview
DBMS_CRYPTO is a package that provides hash algorithms used for data encryption/decryption and authentication, and can be used as an alternative when not adopting a 3rd party solution. This article guides you through the setup method and examples to utilize it.
Method
Create Encryption Function
SQL> CREATE OR REPLACE FUNCTION FN_ENCRYPT_ARIA256 (IN_DATA IN VARCHAR2)
RETURN VARCHAR2
IS
V_RETURN VARCHAR2(200);
KEY RAW(128);
DATA_RAW RAW(256);
ENCRYP_DATA_ARIA256 RAW(256);
IV RAW(256);
BEGIN
IF IN_DATA IS NULL THEN
RETURN '';
END IF;
KEY := UTL_RAW.cast_to_raw('MyEncryptionKey123MyEncryptionKey123');
IV := '00000000000000000000000000000000';
DATA_RAW := UTL_RAW.CAST_TO_RAW (IN_DATA);
ENCRYP_DATA_ARIA256 := DBMS_CRYPTO.ENCRYPT(DATA_RAW, DBMS_CRYPTO.ENCRYPT_ARIA256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, KEY, IV);
V_RETURN := ENCRYP_DATA_ARIA256;
RETURN V_RETURN;
END FN_ENCRYPT_ARIA256;
Create Decryption Function
SQL> CREATE OR REPLACE FUNCTION FN_DECRYPT_ARIA256 (IN_DATA IN VARCHAR2)
RETURN VARCHAR2
IS
V_RETURN VARCHAR2(200);
KEY RAW(128);
DECRYPT_DATA_ARIA256 RAW(256);
IV RAW(256);
BEGIN
IF IN_DATA IS NULL THEN
RETURN '';
END IF;
KEY := UTL_RAW.cast_to_raw('MyEncryptionKey123MyEncryptionKey123');
IV := '00000000000000000000000000000000';
DECRYPT_DATA_ARIA256 := DBMS_CRYPTO.DECRYPT(IN_DATA
, DBMS_CRYPTO.ENCRYPT_ARIA256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5
, KEY
, IV);
V_RETURN := UTL_RAW.CAST_TO_VARCHAR2 (DECRYPT_DATA_ARIA256);
RETURN V_RETURN;
END FN_DECRYPT_ARIA256;Example
SQL> SELECT FN_ENCRYPT_ARIA256('aaaa') AS ENC FROM DUAL;
ENC
----------------------------------
A01725B87466A512A3B29E81F54B9C55
SQL> SELECT FN_DECRYPT_ARIA256('A01725B87466A512A3B29E81F54B9C55') AS DEC FROM DUAL;
DEC
----------------------------------
aaaa