Hier gebe ich ein Beispiel, um das Passwort in Oracle mit dem DBMS_CRYPTO-Paket zu verschlüsseln.
Um dies zu demonstrieren, habe ich die folgende Tabelle erstellt, um den Datentyp der Benutzer-ID (USER_ID) varchar2 und den Rohdatentyp des verschlüsselten Passworts (ENC_PSW) zu speichern.
Tabelle erstellen
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)) /
Ein Beispiel zum Verschlüsseln von Passwörtern in Oracle
Durch das folgende PL/SQL-Programm speichern wir nun das Passwort mypassword123 für die Benutzer-ID SCOTT . Der Schlüssel ist der entscheidende Teil für die Verschlüsselung, da Sie zum Entschlüsseln denselben Schlüssel verwenden müssen. Sie können jeden alphanumerischen Schlüssel mit 16 Zeichen Länge verwenden. Weitere Informationen zum DBMS_CRYPTO-Paket finden Sie in der Oracle-Dokumentation.
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; /
Ausgabe
Encrypted=132BEDB1C2CDD8F23B5A619412C27B60 PL/SQL procedure successfully completed.
Überprüfen Sie die Daten in der Tabelle ENC_DATA:
SELECT * FROM enc_data;
USER_ID ENC_PSW SCOTT 132BEDB1C2CDD8F23B5A619412C27B60
Im obigen Beispiel wurde das Passwort für die Benutzer-ID SCOTT verschlüsselt und in der Tabelle enc_data gespeichert. Unten ist nun das PL/SQL-Programm, um das Passwort abzurufen und zu entschlüsseln.
Ein Beispiel zum Entschlüsseln von Passwörtern in 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; /
Ausgabe
Decrypted=mypassword123 PL/SQL procedure successfully completed.
Siehe auch:
- Wie verstecke ich das Passwort in Oracle-Formularen?
- Sys-Benutzerkennwort in Oracle ändern