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
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