Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verschlüsselt man ein Passwort in Oracle?

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