Her giver jeg et eksempel på at kryptere adgangskoden i Oracle ved hjælp af DBMS_CRYPTO-pakken.
For at demonstrere dette har jeg oprettet følgende tabel til at gemme bruger-id (USER_ID) varchar2 datatype og til at gemme den krypterede adgangskode (ENC_PSW) rådatatype.
Opret 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)) /
Et eksempel på kryptering af adgangskode i Oracle
Nu gennem følgende PL/SQL-program gemmer vi adgangskoden mypassword123 for bruger-id'et SCOTT . Nøglen er den vitale del for kryptering, fordi du skal bruge den samme nøgle for at dekryptere den. Du kan bruge enhver alfanumerisk nøgle på 16 tegn. For mere information om DBMS_CRYPTO-pakken, se Oracle-dokumentationen.
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; /
Output
Encrypted=132BEDB1C2CDD8F23B5A619412C27B60 PL/SQL procedure successfully completed.
Tjek dataene i ENC_DATA-tabellen:
SELECT * FROM enc_data;
USER_ID ENC_PSW SCOTT 132BEDB1C2CDD8F23B5A619412C27B60
I ovenstående eksempel krypterede den adgangskoden til bruger-id'et SCOTT og blev gemt i tabellen enc_data. Nu nedenfor er PL/SQL-programmet til at hente adgangskoden og dekryptere den.
Et eksempel på dekryptering af adgangskode i 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; /
Output
Decrypted=mypassword123 PL/SQL procedure successfully completed.
Se også:
- Hvordan skjules adgangskoden i Oracle Forms?
- Skift Sys-brugeradgangskode i Oracle