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

Làm thế nào để mã hóa mật khẩu trong Oracle?

Ở đây tôi đang đưa ra một ví dụ để mã hóa mật khẩu trong Oracle bằng cách sử dụng gói DBMS_CRYPTO.

Để chứng minh điều này, tôi đã tạo bảng sau để lưu trữ kiểu dữ liệu varchar2 của ID người dùng (USER_ID) và để lưu trữ kiểu dữ liệu thô của mật khẩu được mã hóa (ENC_PSW).

Tạo bảng

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

Một ví dụ để mã hóa mật khẩu trong Oracle

Bây giờ thông qua chương trình PL / SQL sau, chúng tôi sẽ lưu trữ mật khẩu mypassword123 cho ID người dùng SCOTT . Khóa là phần quan trọng đối với mã hóa vì để giải mã nó, bạn cần sử dụng cùng một khóa. Bạn có thể sử dụng bất kỳ phím chữ-số nào có độ dài 16 ký tự. Để biết thêm thông tin về gói DBMS_CRYPTO, hãy kiểm tra Tài liệu 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;
/

Đầu ra

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Kiểm tra dữ liệu trong bảng ENC_DATA:

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

Trong ví dụ trên, nó đã mã hóa mật khẩu cho SCOTT ID người dùng và được lưu trữ vào bảng enc_data. Bây giờ bên dưới là chương trình PL / SQL để tìm nạp mật khẩu và giải mã nó.

Ví dụ để giải mã mật khẩu trong 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;
/

Đầu ra

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Xem thêm:

  • Làm cách nào để ẩn mật khẩu trong các biểu mẫu Oracle?
  • Thay đổi mật khẩu người dùng Sys trong 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. Java:Gọi một thủ tục được lưu trữ trong cơ sở dữ liệu oracle

  2. Có biểu thức CASE như vậy trong JPQL không?

  3. Danh sách các tham số NLS trong Cơ sở dữ liệu Oracle

  4. Hàm UPPER () trong Oracle

  5. Cơ sở dữ liệu Oracle là gì?