Friday 27 May 2016

Encrypt and Decrypt Password in Oracle



Package Spec:


CREATE OR REPLACE PACKAGE APPS.XX_SFTP_UTIL_PKG
AS
   FUNCTION encrypt (p_plainText VARCHAR2) RETURN RAW DETERMINISTIC;
   FUNCTION decrypt (p_encryptedText RAW) RETURN VARCHAR2 DETERMINISTIC;

END XX_SFTP_UTIL_PKG;


/ 


Package Body:


CREATE OR REPLACE PACKAGE BODY APPS.XX_SFTP_UTIL_PKG
AS
     encryption_type    PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES


                                     + DBMS_CRYPTO.CHAIN_CBC


                                     + DBMS_CRYPTO.PAD_PKCS5;
     /*
       ENCRYPT_DES is the encryption algorithem. Data Encryption Standard. Block cipher.
       Uses key length of 56 bits.
       CHAIN_CBC Cipher Block Chaining. Plaintext is XORed with the previous ciphertext
       block before it is encrypted.
       PAD_PKCS5 Provides padding which complies with the PKCS #5: Password-Based
       Cryptography Standard
     */


     encryption_key     RAW (32) := UTL_RAW.cast_to_raw('MyEncryptionKey');
     -- The encryption key for DES algorithem, should be 8 bytes or more. 


     FUNCTION encrypt (p_plainText VARCHAR2) RETURN RAW DETERMINISTIC
     IS
        encrypted_raw      RAW (2000);


     BEGIN


        encrypted_raw := DBMS_CRYPTO.ENCRYPT
        (
           src => UTL_RAW.CAST_TO_RAW (p_plainText),
           typ => encryption_type,
           key => encryption_key
        );


       RETURN encrypted_raw;
     END encrypt;


     FUNCTION decrypt (p_encryptedText RAW) RETURN VARCHAR2 DETERMINISTIC
     IS
        decrypted_raw      RAW (2000);
     BEGIN
        decrypted_raw := DBMS_CRYPTO.DECRYPT
        (
            src => p_encryptedText,
            typ => encryption_type,
            key => encryption_key
        );
        RETURN (UTL_RAW.CAST_TO_VARCHAR2 (decrypted_raw));
     END decrypt;


END;


/




 


 


 

No comments:

Post a Comment