Oracle ile Veri Şifreleme(Data Encryption)

Makale öncesi : Veri güvenliği ve şifreleme ile ilgili düşüncelerimi anlattığım SQL Server ile Veri Şifreleme(Data Encryption) makalemi inceleyebilirsiniz.

Bu makalemde tablo ve Oracle mimarisine fazla girmeden bir paket oluşturarak veri şifrelemeyi nasıl yapacağımıza bir bakacağız.

Java ve Oracle’cıların bildiği gibi paketler kendi içerisinde farklı yazılım nesnelerini tutmak ve bunları Paket.NesneAd şeklinde kolay, yönetilebilir olarak kullanabilmek için tasarlanmıştır.

Şimdi şifreleme işlemiyle ilgili paketimizin başlık kısmını, daha sonra da gövdesini oluşturalım.

CREATE OR REPLACE PACKAGE Araclar AS FUNCTION Sifrele(p_text  IN  VARCHAR2) RETURN RAW;
FUNCTION
SifreCoz (p_raw IN RAW) RETURN VARCHAR2;
END
Araclar;

Görüldüğü üzere paket içerisinde iki fonksiyon var ve bunlardan biri şifreleme işlemi yaparken diğeri de bu şifreyi çözmek için tasarlandı. Şimdi bu paketin gövdesini oluşturalım.

CREATE OR REPLACE PACKAGE BODY Araclar AS
g_key RAW(32767) := UTL_RAW.cast_to_raw('keyimbenim');
g_pad_chr VARCHAR2(1) := '~';
PROCEDURE
padstring (p_text IN OUT VARCHAR2);
FUNCTION
Sifrele (p_text IN VARCHAR2) RETURN RAW IS
l_text VARCHAR2(32767) := p_text;
l_encrypted RAW(32767);
BEGIN
padstring(l_text);
DBMS_OBFUSCATION_TOOLKIT.desencrypt(input => UTL_RAW.cast_to_raw(l_text),
key
=> g_key,
encrypted_data => l_encrypted);
RETURN
l_encrypted;END;
     FUNCTION SifreCoz (p_raw  IN  RAW) RETURN VARCHAR2 IS l_decrypted  VARCHAR2(32767);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.desdecrypt(input => p_raw,
key
=> g_key,
decrypted_data => l_decrypted);
RETURN RTrim(UTL_RAW.cast_to_varchar2(l_decrypted), g_pad_chr);
END;
     PROCEDURE padstring (p_text  IN OUT  VARCHAR2) IS l_units  NUMBER;
BEGIN
IF LENGTH(p_text) MOD 8 > 0 THEN
l_units := TRUNC(LENGTH(p_text)/8) + 1;
p_text := RPAD(p_text, l_units * 8, g_pad_chr);
END
IF;
END;
END
Araclar;

Paket oluşturma işlemini gerçekleştirdik. Artık Sifrele ve SifreCoz fonksiyonlarını kullanarak şifreleme işlemi gerçekleştirebiliriz.

SET SERVEROUTPUT ON;
DECLARE
p_deger VARCHAR2(16) := 'cihanozhan.com';
p_raw RAW(16);
BEGIN
DBMS_OUTPUT.put_line('Girilen Veri : '
|| p_deger);
p_raw := Araclar.Sifrele(p_deger);
DBMS_OUTPUT.put_line('Şifreli Veri : '
|| p_raw);
DBMS_OUTPUT.put_line('Şifresi Çözülen Veri : '
|| Araclar.SifreCoz(p_raw));
END;

Şifreleme ve şifreden geri döndürme işlemi sonrasında ekran çıktısı aşağıdaki gibi olacaktır.

Kaynak : http://www.cihanozhan.com/oracle-ile-veri-sifreleme-data-encryption/

İyi çalışmalar.
Cihan Özhan