Här ger jag ett exempel för att kryptera lösenordet i Oracle med paketet DBMS_CRYPTO.
För att demonstrera detta har jag skapat följande tabell för att lagra användar-ID (USER_ID) varchar2-datatyp och för att lagra rådatatypen för krypterade lösenord (ENC_PSW).
Skapa tabell
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)) /
Ett exempel för att kryptera lösenord i Oracle
Nu genom följande PL/SQL-program kommer vi att lagra lösenordet mypassword123 för användar-ID:t SCOTT . Nyckeln är den avgörande delen för kryptering eftersom du måste använda samma nyckel för att dekryptera den. Du kan använda vilken alfanumerisk tangent som helst med 16 tecken. För mer information om DBMS_CRYPTO-paketet, 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; /
Utdata
Encrypted=132BEDB1C2CDD8F23B5A619412C27B60 PL/SQL procedure successfully completed.
Kontrollera data i ENC_DATA-tabellen:
SELECT * FROM enc_data;
USER_ID ENC_PSW SCOTT 132BEDB1C2CDD8F23B5A619412C27B60
I exemplet ovan krypterade den lösenordet för användar-ID SCOTT och lagrades i tabellen enc_data. Nu nedan är PL/SQL-programmet för att hämta lösenordet och dekryptera det.
Ett exempel för att dekryptera lösenord 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; /
Utdata
Decrypted=mypassword123 PL/SQL procedure successfully completed.
Se även:
- Hur döljer man lösenordet i Oracle Forms?
- Ändra Sys-användarlösenord i Oracle