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