Berikut saya berikan contoh untuk mengenkripsi password di Oracle menggunakan paket DBMS_CRYPTO.
Untuk mendemonstrasikannya, saya telah membuat tabel berikut untuk menyimpan tipe data varchar2 ID pengguna (USER_ID) dan untuk menyimpan tipe data mentah kata sandi terenkripsi (ENC_PSW).
Buat Tabel
SET DEFINE OFF; CREATE TABLE ENC_DATA ( USER_ID VARCHAR2(20 BYTE), ENC_PSW RAW(2000) ) / ALTER TABLE ENC_DATA ADD ( CONSTRAINT ENC_DATA_PK PRIMARY KEY (USER_ID)) /
Contoh Mengenkripsi Kata Sandi di Oracle
Sekarang melalui program PL/SQL berikut, kita akan menyimpan password mypassword123 untuk ID pengguna SCOTT . Kunci adalah bagian penting untuk enkripsi karena untuk mendekripsi Anda perlu menggunakan kunci yang sama. Anda dapat menggunakan kunci alfanumerik apa pun dengan panjang 16 karakter. Untuk informasi lebih lanjut tentang paket DBMS_CRYPTO, periksa Dokumentasi Oracle.
SET SERVEROUTPUT ON; DECLARE l_user_id enc_data.USER_ID%TYPE := 'SCOTT'; l_user_psw VARCHAR2 (2000) := 'mypassword123'; l_key VARCHAR2 (2000) := '1234567890999999'; l_mod NUMBER := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_enc RAW (2000); BEGIN l_user_psw := DBMS_CRYPTO.encrypt (UTL_I18N.string_to_raw (l_user_psw, 'AL32UTF8'), l_mod, UTL_I18N.string_to_raw (l_key, 'AL32UTF8')); DBMS_OUTPUT.put_line ('Encrypted=' || l_user_psw); INSERT INTO enc_data (user_id, enc_psw) VALUES (l_user_id, l_user_psw); COMMIT; END; /
Keluaran
Encrypted=132BEDB1C2CDD8F23B5A619412C27B60 PL/SQL procedure successfully completed.
Periksa data di tabel ENC_DATA:
SELECT * FROM enc_data;
USER_ID ENC_PSW SCOTT 132BEDB1C2CDD8F23B5A619412C27B60
Dalam contoh di atas, itu mengenkripsi kata sandi untuk ID pengguna SCOTT dan disimpan ke tabel enc_data. Sekarang di bawah ini adalah program PL/SQL untuk mengambil kata sandi dan mendekripsinya.
Contoh Mendekripsi Kata Sandi di Oracle
SET SERVEROUTPUT ON; DECLARE l_user_id enc_data.user_id%TYPE := 'SCOTT'; l_user_psw RAW (2000); l_key VARCHAR2 (2000) := '1234567890999999'; l_mod NUMBER := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_dec RAW (2000); BEGIN SELECT enc_psw INTO l_user_psw FROM enc_data WHERE user_id = l_user_id; l_dec := DBMS_CRYPTO.decrypt (l_user_psw, l_mod, UTL_I18N.STRING_TO_RAW (l_key, 'AL32UTF8')); DBMS_OUTPUT.put_line ('Decrypted=' || UTL_I18N.raw_to_char (l_dec)); END; /
Keluaran
Decrypted=mypassword123 PL/SQL procedure successfully completed.
Lihat juga:
- Bagaimana Menyembunyikan Kata Sandi di Oracle Forms?
- Ubah kata sandi pengguna Sys di Oracle