Encrypt dan Decrypt string di Oracle 9i dan 10g

14 Aug 2008

Ada beberapa macam cara untuk melakukan encrypt dan decrypt string di oracle. Biasanya ini digunakan bila kita ingin menyimpan data password atau data-data penting lainnya.
berikut adalah salah satunya.

Untuk Oracle 9i menggunakan dbms_obfuscation_toolkit package
(Jangan lupa untuk memberikan privileges execute untuk package diatas kepada user yang menjalankan.)

CREATE OR REPLACE PACKAGE Cryptit AS
FUNCTION encrypt( Str VARCHAR2 ) RETURN RAW;
FUNCTION decrypt( xCrypt VARCHAR2 ) RETURN VARCHAR2;
END Cryptit;
CREATE OR REPLACE PACKAGE BODY Cryptit AS
crypt_raw RAW(2000);
crypt_str VARCHAR(2000);
-- Encrypt string --
FUNCTION encrypt( Str VARCHAR2 ) RETURN RAW AS
l INTEGER := LENGTH(str);
i INTEGER;
padblock RAW(2000);
Cle RAW(8) := UTL_RAW.CAST_TO_RAW('frankzap');
BEGIN
i := 8-MOD(l,8);
padblock := utl_raw.cast_to_raw(str||RPAD(CHR(i),i,CHR(i)));
dbms_obfuscation_toolkit.DESEncrypt(
input => padblock,
KEY => Cle,
encrypted_data => crypt_raw );
RETURN crypt_raw ;
END;
-- Decrypt string --
FUNCTION decrypt( xCrypt VARCHAR2 ) RETURN VARCHAR2 AS
l NUMBER;
Cle RAW(8) := UTL_RAW.CAST_TO_RAW('frankzap');
crypt_raw RAW(2000) := utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(xCrypt)) ;
BEGIN
dbms_obfuscation_toolkit.DESDecrypt(
input => xCrypt,
KEY => Cle,
decrypted_data => crypt_raw );
crypt_str := utl_raw.cast_to_varchar2(crypt_raw);
l := LENGTH(crypt_str);
crypt_str := RPAD(crypt_str,l-ASCII(SUBSTR(crypt_str,l)));
RETURN crypt_str;
END;
END Cryptit;

Untuk test nya :

DECLARE
LC$Code VARCHAR2(100) := 'Ini contoh 1 encrypt dan decrypt!' ;
BEGIN
-- encrypt string --
LC$Code := Cryptit.Encrypt( LC$Code ) ;
dbms_output.put_line( LC$Code ) ;
-- decrypt string --
LC$Code := Cryptit.Decrypt( LC$Code ) ;
dbms_output.put_line( LC$Code ) ;
END ;

Untuk Oracle 10g menggunakan dbms_crypto package
(Jangan lupa untuk memberikan privileges execute untuk package diatas kepada user yang menjalankan.)

DECLARE
LC$Source VARCHAR2(60) := 'Ini contoh 1 encrypt dan decrypt!';
LR$Source RAW(128) := utl_raw.cast_to_raw(LC$Source);
LR$Key RAW(128) := utl_raw.cast_to_raw('okecoy$enc$dec');
LR$Crypted RAW(2048);
LR$Decrypted RAW(2048);
BEGIN
dbms_output.put_line('Source string : ' || LC$Source);
LR$Crypted := dbms_crypto.encrypt(LR$Source,
dbms_crypto.des_cbc_pkcs5, LR$Key);
dbms_output.put_line('Hasil Encrypt : ' ||
RAWTOHEX(utl_raw.cast_to_raw(LR$Crypted)));
LR$Decrypted := dbms_crypto.decrypt(src => LR$Crypted,
typ => dbms_crypto.des_cbc_pkcs5, key => LR$Key);
dbms_output.put_line('Hasil Decrypt : ' ||
utl_raw.cast_to_varchar2(LR$Decrypted));
END;

1 Tanggapan

  1. 1 yongki
    11-November-2008 pukul 15:27

    Nanya om, gimana caranya manggil file excel yang bisa langsung ditampilkan di form oracle, baik versi 6i maupun versi 10g, kalau bisa yang tidak pake odbc om???

Asupan RSS untuk tanggapan ke tulisan ini | URI Lacak balik (trackback)

Leave a Reply

Anda boleh menggunakan tag berikut:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>