Wednesday, April 23, 2025

.::: how to use DBMS_CRYPTO.ENCRYPT dan DBMS_CRYPTO.DECRYPT in Oracle as example table pembelian :::.

 
Oke! Saya akan kasih kamu contoh penggunaan DBMS_CRYPTO.ENCRYPT dan DBMS_CRYPTO.DECRYPT pada tabel pembelian. Di sini, kita akan menyimpan kolom credit_card_number dalam bentuk terenkripsi, dan mendekripsinya saat dibaca.

Studi Kasus: Tabel pembelian_card

1. grant access


GRANT EXECUTE ON DBMS_CRYPTO TO admin;
commit;


2. Buat tabel:

CREATE TABLE pembelian_card (
    id               NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nama_pembeli     VARCHAR2(100),
    credit_card_enc  RAW(2000) -- data terenkripsi
);


3. Simpan data dengan enkripsi

DECLARE
  v_card_number  VARCHAR2(50) := '4111111111111111'; -- contoh nomor kartu
  v_key          RAW(16) := UTL_RAW.cast_to_raw('1234567890ABCDEF'); -- 16 karakter
  v_encrypted    RAW(2000);
BEGIN
  v_encrypted := DBMS_CRYPTO.ENCRYPT(
    src => UTL_RAW.cast_to_raw(v_card_number),
    typ => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
    key => v_key
  );

  INSERT INTO pembelian_card (nama_pembeli, credit_card_enc)
  VALUES ('Ratna Juwita', v_encrypted);

  COMMIT;
END;
/


4. list DBMS_CRYPTO
SELECT table_name, column_name, data_type
FROM user_tab_columns
WHERE data_type = 'RAW';

 

5. Baca data dan dekripsi

SET SERVEROUTPUT ON;
DECLARE
  v_key         RAW(16) := UTL_RAW.cast_to_raw('1234567890ABCDEF'); -- 16 karakter
  v_encrypted   RAW(2000);
  v_decrypted   VARCHAR2(100);
BEGIN
  SELECT credit_card_enc INTO v_encrypted
  FROM pembelian_card
  WHERE nama_pembeli = 'Ratna Juwita';

  v_decrypted := UTL_RAW.cast_to_varchar2(
    DBMS_CRYPTO.DECRYPT(
      src => v_encrypted,
      typ => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
      key => v_key
    )
  );

  DBMS_OUTPUT.PUT_LINE('Nomor kartu terdekripsi: ' || v_decrypted);
END;
/

 

6. check query

select * from pembelian_card;
 


No comments:

Post a Comment