Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment chiffrer un mot de passe dans Oracle ?

Ici, je donne un exemple pour chiffrer le mot de passe dans Oracle en utilisant le package DBMS_CRYPTO.

Pour le démontrer, j'ai créé la table suivante pour stocker le type de données varchar2 de l'ID utilisateur (USER_ID) et pour stocker le type de données brutes du mot de passe crypté (ENC_PSW).

Créer un tableau

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 exemple pour chiffrer un mot de passe dans Oracle

Maintenant, via le programme PL/SQL suivant, nous allons stocker le mot de passe mypassword123 pour l'ID utilisateur SCOTT . La clé est la partie essentielle du chiffrement car pour la déchiffrer, vous devez utiliser la même clé. Vous pouvez utiliser n'importe quelle touche alphanumérique de 16 caractères. Pour plus d'informations sur le package DBMS_CRYPTO, consultez la documentation 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;
/

Sortie

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Vérifiez les données dans la table ENC_DATA :

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

Dans l'exemple ci-dessus, il a chiffré le mot de passe pour l'ID utilisateur SCOTT et l'a stocké dans la table enc_data. Vous trouverez ci-dessous le programme PL/SQL pour récupérer le mot de passe et le déchiffrer.

Un exemple pour déchiffrer un mot de passe dans 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;
/

Sortie

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Voir aussi :

  • Comment masquer le mot de passe dans les formulaires Oracle ?
  • Modifier le mot de passe de l'utilisateur système dans Oracle