Ở đâ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