ENCRYPTION IN Oracle 10G

DBMS_CRYPTO package provides an interface to encrypt and decrypt stored data. For example, the table CUST_MASTER has three columns ACNO,NAME,BALANCE and you wish to encrypt the column NAME and BALANCE. Using the dbms_crypto.ENCRYPT functions,you can create your function to encrypt data.

Example:

Create a table CUST_MASTER .

SQL> create table cust_master(acno number(10),name varchar2(200),balance varchar2(200));

Table created.

SQL> desc cust_master
 Name                                      Null?    Type
 —————————————– ——– —————————-
 ACNO                                               NUMBER(10)
 NAME                                               VARCHAR2(200)
 BALANCE                                            VARCHAR2(200)

After creating the table, using the dbms_crypto package create your function. Before creating the function you should have execute privilege on dbms_crypto.

CREATING FUNCTION FOR ENCRYPTION

SQL> create or replace FUNCTION encrypt(p_in in varchar2)
  2  return raw is
  3  l_enc_val raw (2000);
  4  l_mod PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128 + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5;
  5  l_key raw(16) := UTL_I18N.STRING_TO_RAW( ‘preventbettrcure’, ‘AL32UTF8′ );
  6  begin
  7      l_enc_val := dbms_crypto.encrypt(UTL_I18N.STRING_TO_RAW(p_in, ‘AL32UTF8′), l_mod, l_key);
  8      return l_enc_val;
  9  END;
 10  /

Function created.

After creating function, insert the records in the table using the function.

SQL> insert into cust_master (acno,name,balance) values (1001,encrypt(’ABDUL_KALAM’),encrypt(’10000000′));

1 row created.

QUERY THE TABLE and you will see the encrypted values.

SQL> select * from cust_master;

      ACNO NAME                                     BALANCE
———- —————————————- ————————————————–
      1001 B42D559293EAA24F44FF3D1C821E80B7         49A6A38E96A1E89CA3D24BAF122261F1

CREATING FUNCTION FOR DECRYPTION

SQL> create or replace FUNCTION decrypt(p_in in raw)
  2  return varchar2
  3  is
  4  l_ret varchar2 (2000);
  5  l_key raw(16) := UTL_I18N.STRING_TO_RAW( ‘preventbetrcure’, ‘AL32UTF8′ );
  6  l_dec_val raw (2000);
  7  l_mod number := dbms_crypto.ENCRYPT_AES128 + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5;
  8  begin
  9      l_dec_val := dbms_crypto.decrypt(p_in, l_mod, l_key );
 10      l_ret:= UTL_I18N.RAW_TO_CHAR(l_dec_val, ‘AL32UTF8′);
 11      return l_ret;
 12  end;
 13  /

Function created.

RETRIVEING ACTUAL VALUES USING DECRYPTION FUNCTION

SQL> SELECT ACNO,DECRYPT(’B42D559293EAA24F44FF3D1C821E80B7′),DECRYPT(’49A6A38E96A1E89CA3D24BAF122261F1′) FROM cust_master;

      ACNO
———-
DECRYPT(’B42D559293EAA24F44FF3D1C821E80B7′)
————————————————————————————————————————
DECRYPT(’49A6A38E96A1E89CA3D24BAF122261F1′)
————————————————————————————————————————
      1001
ABDUL_KALAM
10000000

 

 

 

Add Your Comment