Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách mã hóa dữ liệu trong Oracle bằng PL SQL

Một cách đơn giản và an toàn để mã hóa và giải mã dữ liệu trong Oracle với gói DBMS_OBFUSCATION_TOOLKIT. DBMS_OBFUSCATION_TOOLKIT cho phép ứng dụng mã hóa dữ liệu bằng cách sử dụng Tiêu chuẩn mã hóa dữ liệu (DES) hoặc thuật toán Triple DES. Dưới đây là ví dụ về hàm đóng gói cơ sở dữ liệu để mã hóa dữ liệu trong Oracle bằng cách sử dụng PL SQL.

Gói Bộ công cụ sau sử dụng gói DBMS_OBFUSCATION_TOOLKIT để mã hóa và giải mã dữ liệu.

Lưu ý:Bạn phải sửa đổi khóa được xác định trong gói này để có phương pháp mã hóa bí mật tùy chỉnh của bạn. Dữ liệu được mã hóa bằng khóa chỉ có thể được giải mã bằng khóa đó. Tìm hiểu thêm ...

Cách sử dụng để mã hóa dữ liệu trong Oracle:

Select toolkit.encrypt('The test data 123.') From Dual;
Shows:
-----------
5C8ADD7B98919FC937A53AB986782EA9EE63D4ADDF7CA322

Để giải mã dữ liệu:

select Toolkit.decrypt('5C8ADD7B98919FC937A53AB986782EA9EE63D4ADDF7CA322') from dual;
Shows:
-----------
The test data 123.
Create Or Replace PACKAGE Toolkit As
  FUNCTION encrypt (p_text  In  VARCHAR2) RETURN RAW;
  FUNCTION decrypt (p_raw  In  RAW) RETURN VARCHAR2;
END Toolkit;
/
Create Or Replace PACKAGE BODY Toolkit As
  ---- the custom key for 
  g_key     RAW(32767)  := UTL_RAW.cast_to_raw('20130417');
  ---- the custom padding character
  g_pad_chr VARCHAR2(1) := '_';

  PROCEDURE padstring (p_text  In OUT  VARCHAR2);

  FUNCTION encrypt (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 decrypt (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 Toolkit;
/

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể xảy ra bế tắc khi cập nhật và xóa các hàng khác nhau trong bảng không?

  2. Phương thức thực thi Spring Hibernate Template trả về loại đối tượng nào cho một truy vấn đếm trên Oracle?

  3. Định dạng DATE mặc định của Oracle

  4. Nhập tệp .csv vào ứng dụng Oracle Forms

  5. Cách lấy ngày hiện tại trong Oracle