Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana Mengenkripsi Kata Sandi di Oracle?

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi NLS_LOWER() di Oracle

  2. Perubahan Tabel Pemantauan di Oracle

  3. Bagaimana saya bisa mematikan semua sesi yang terhubung ke database Oracle saya?

  4. Daftar Bahasa yang Didukung oleh Oracle Database

  5. Apakah variabel PL/SQL di kursor secara efektif sama dengan parameter bind?