sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo cifrar la contraseña en Oracle?

Aquí doy un ejemplo para encriptar la contraseña en Oracle usando el paquete DBMS_CRYPTO.

Para demostrar esto, he creado la siguiente tabla para almacenar el tipo de datos varchar2 del ID de usuario (USER_ID) y para almacenar el tipo de datos sin procesar de la contraseña cifrada (ENC_PSW).

Crear tabla

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))
/

Un ejemplo para cifrar la contraseña en Oracle

Ahora a través del siguiente programa PL/SQL, almacenaremos la contraseña mypassword123 para el ID de usuario SCOTT . La clave es la parte vital para el cifrado porque para descifrarlo necesita usar la misma clave. Puede utilizar cualquier tecla alfanumérica de 16 caracteres de longitud. Para obtener más información sobre el paquete DBMS_CRYPTO, consulte la documentación de 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;
/

Salida

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Verifique los datos en la tabla ENC_DATA:

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

En el ejemplo anterior, cifró la contraseña para el ID de usuario SCOTT y la almacenó en la tabla enc_data. Ahora debajo está el programa PL/SQL para obtener la contraseña y descifrarla.

Un ejemplo para descifrar la contraseña en 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;
/

Salida

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Véase también:

  • ¿Cómo ocultar la contraseña en los formularios de Oracle?
  • Cambiar la contraseña de usuario del sistema en Oracle