Oracle8i Supplied PL/SQL Packages Reference
Release 2 (8.1.6)

Part Number A76936-01

Library

Product

Contents

Index

Go to previous page Go to beginning of chapter Go to next page

DBMS_OBFUSCATION_TOOLKIT , 3 of 3


DESDecrypt Procedure

The purpose of the DESDecrypt procedure is to generate the decrypted form of the input data. An example of the DESDecrypt syntax appears at the end of this chapter.

Parameter Descriptions

Table 23-3 and Table 23-4 list the parameters for the DESDecrypt syntax, their modes, types, and descriptions.

Table 23-3 DESDecrypt parameters for raw data
Parameter Name  Mode  Type  Description 

input 

IN 

RAW 

Data to be decrypted 

key 

IN 

RAW 

Decryption key 

decrypted_data 

OUT 

RAW 

Decrypted data 

Table 23-4 DESDecrypt parameters for string data
Parameter Name  Mode  Type  Description 

input_string 

IN 

VARCHAR2 

String to be decrypted 

key_string 

IN 

VARCHAR2 

Decryption key string 

decrypted_string 

OUT 

VARCHAR2 

Decrypted string 

If the input data or key given to the PL/SQL DESDecrypt function is empty, then Oracle raises ORA error 28231 "Invalid input to Obfuscation toolkit".

If the input data given to the DESDecrypt function is not a multiple of 8 bytes, Oracle raises ORA error 28232 "Invalid input size for Obfuscation toolkit".


Note:

ORA-28233 is NOT applicable for the DESDecrypt function.  


DESDecryption Procedure Restriction

The DES key length for encryption is fixed at 56 bits; you cannot alter this key length.


Note:

The key length limitation is a requirement of US regulations governing the export of cryptographic products.  


DESEncryption and DESDecryption Code Example

Following is a sample PL/SQL program for your reference. Segments of the code are numbered and contain narrative text explaining portions of the code.

DECLARE
   input_string        VARCHAR2(16) := 'tigertigertigert';
   raw_input           RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);
   key_string          VARCHAR2(8)  := 'scottsco';
   raw_key             RAW(128) := UTL_RAW.CAST_TO_RAW(key_string);
   wrong_input_string  VARCHAR2(25) := 'not_a_multiple_of_8_bytes';
   wrong_raw_input     RAW(128) := UTL_RAW.CAST_TO_RAW(wrong_input_string);
   wrong_key_string    VARCHAR2(8)  := 'scottsco';
   wrong_raw_key       RAW(128) := UTL_RAW.CAST_TO_RAW(wrong_key_string);
   encrypted_raw               RAW(2048);
   encrypted_string            VARCHAR2(2048);
   double_encrypted_raw        RAW(2048);
   double_encrypted_string     VARCHAR2(2048);
   decrypted_raw               RAW(2048);
   decrypted_string            VARCHAR2(2048); 
   error_in_input_buffer_length EXCEPTION;
   PRAGMA EXCEPTION_INIT(error_in_input_buffer_length, -28232);
   INPUT_BUFFER_LENGTH_ERR_MSG VARCHAR2(100) :=
    '*** DES INPUT BUFFER NOT A MULTIPLE OF 8 BYTES - IGNORING EXCEPTION ***';
   double_encrypt_not_permitted EXCEPTION;
   PRAGMA EXCEPTION_INIT(double_encrypt_not_permitted, -28233);
   DOUBLE_ENCRYPTION_ERR_MSG VARCHAR2(100) :=
    '*** CANNOT DOUBLE ENCRYPT DATA - IGNORING EXCEPTION ***';

-- 1. Begin testing raw data encryption and decryption
   BEGIN
   dbms_output.put_line('> ========= BEGIN TEST RAW DATA =========');
   dbms_output.put_line('> Raw input                        : ' || 
                 UTL_RAW.CAST_TO_VARCHAR2(raw_input));
   BEGIN 
      dbms_obfuscation_toolkit.DESEncrypt(input => raw_input, 
               key => raw_key, encrypted_data => encrypted_raw );
      dbms_output.put_line('> encrypted hex value              : ' || 
               rawtohex(encrypted_raw));
      dbms_obfuscation_toolkit.DESDecrypt(input => encrypted_raw, 
               key => raw_key, decrypted_data => decrypted_raw);
      dbms_output.put_line('> Decrypted raw output             : ' || 
                    UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw));
      dbms_output.put_line('>  ');      
      if UTL_RAW.CAST_TO_VARCHAR2(raw_input) = 
                    UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw) THEN
         dbms_output.put_line('> Raw DES Encyption and Decryption successful');
      END if;
   EXCEPTION
      WHEN error_in_input_buffer_length THEN
             dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);
   END;
   dbms_output.put_line('>  ');

-- 2. Begin testing raw data double encryption prevention
   BEGIN
      dbms_output.put_line('> testing double encryption prevention');
      dbms_output.put_line('>  ');
      dbms_obfuscation_toolkit.DESEncrypt(input => raw_input, 
               key => raw_key, encrypted_data => encrypted_raw );
      dbms_output.put_line('> input hex value                   : ' || 
               rawtohex(encrypted_raw));
      dbms_obfuscation_toolkit.DESEncrypt(
               input => encrypted_raw, 
               key => raw_key, 
               encrypted_data => double_encrypted_raw );
      dbms_output.put_line('> double encrypted hex value       : ' || 
                    rawtohex(double_encrypted_raw));
   EXCEPTION
      WHEN  double_encrypt_not_permitted THEN
             dbms_output.put_line('> ' || DOUBLE_ENCRYPTION_ERR_MSG);
   END;
   dbms_output.put_line('>  ');

-- 3. Begin testing wrong raw input length values for encrypt operation
   BEGIN
      dbms_output.put_line('> Wrong Raw input for encryption   : ' || 
                    UTL_RAW.CAST_TO_VARCHAR2(wrong_raw_input));
      dbms_obfuscation_toolkit.DESEncrypt(
               input => wrong_raw_input, 
               key => raw_key, 
               encrypted_data => encrypted_raw );
      dbms_output.put_line('> encrypted hex value              : ' || 
                    rawtohex(encrypted_raw));
   EXCEPTION
      WHEN error_in_input_buffer_length THEN
             dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);
   END;
   dbms_output.put_line('>  ');

-- 4. Begin testing wrong raw input length values for decrypt operation
   BEGIN
      -- testing wrong input values for decyrpt operation
      dbms_output.put_line('> Wrong Raw input for decryption   : ' || 
                    UTL_RAW.CAST_TO_VARCHAR2(wrong_raw_input));
      dbms_obfuscation_toolkit.DESDecrypt
          (input => wrong_raw_input, 
           key => raw_key, 
           decrypted_data => decrypted_raw );
      dbms_output.put_line('> decrypted hex value  : ' 
               || rawtohex(decrypted_raw));
   EXCEPTION
      WHEN error_in_input_buffer_length THEN
             dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);
   END;
   dbms_output.put_line('>  ');
   dbms_output.put_line('> ========= END TEST RAW DATA =========');

-- 5. Begin testing string data encryption and decryption
   dbms_output.put_line('> ========= BEGIN TEST STRING DATA =========');

   BEGIN 
      dbms_output.put_line('> input string                     : ' 
                           || input_string);
      dbms_obfuscation_toolkit.DESEncrypt(
               input_string => input_string, 
               key_string => key_string, 
               encrypted_string => encrypted_string );
      dbms_output.put_line('> encrypted hex value              : ' || 
                   rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_string)));
      dbms_obfuscation_toolkit.DESDecrypt(
               input_string => encrypted_string, 
               key_string => key_string, 
               decrypted_string => decrypted_string );
      dbms_output.put_line('> decrypted string output          : ' || 
                 decrypted_string);
      if input_string = decrypted_string THEN
         dbms_output.put_line('> String DES Encyption and Decryption 
successful');
      END if;
   EXCEPTION
      WHEN error_in_input_buffer_length THEN
             dbms_output.put_line(' ' || INPUT_BUFFER_LENGTH_ERR_MSG);
   END;
   dbms_output.put_line('>  ');

-- 6. Begin testing string data double encryption prevention
   BEGIN
      dbms_output.put_line('> testing double encryption prevention');
      dbms_output.put_line('>  ');
      dbms_obfuscation_toolkit.DESEncrypt(
               input_string => input_string, 
               key_string => key_string, 
               encrypted_string => encrypted_string );
      dbms_output.put_line('> input hex value                  : ' || 
                   rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_string)));
      dbms_obfuscation_toolkit.DESEncrypt(
               input_string => encrypted_string, 
               key_string => key_string, 
               encrypted_string => double_encrypted_string );
      dbms_output.put_line('> double encrypted hex value       : ' || 
                   rawtohex(UTL_RAW.CAST_TO_RAW(double_encrypted_string)));
   EXCEPTION
      WHEN  double_encrypt_not_permitted THEN
             dbms_output.put_line('> ' || DOUBLE_ENCRYPTION_ERR_MSG);
   END;
   dbms_output.put_line('>  ');

-- 7. Begin testing wrong string input length values for encyrpt operation
   BEGIN
      dbms_output.put_line('> testing wrong input values for encyrpt 
operation');
      dbms_output.put_line('> Wrong Raw input for encryption   : ' || 
                    wrong_input_string);
      dbms_obfuscation_toolkit.DESEncrypt(
               input_string => wrong_input_string, 
               key_string => wrong_key_string, 
               encrypted_string => encrypted_string );
      dbms_output.put_line('> encrypted hex value     : ' || 
                   rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_string)));
   EXCEPTION
      WHEN error_in_input_buffer_length THEN
             dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);
   END;
   dbms_output.put_line('>  ');

-- 8. Begin testing wrong string input length values for decrypt operation
   BEGIN
      -- testing wrong input values for decyrpt operation
      dbms_output.put_line('> Wrong Raw input for encryption   : ' || 
                    wrong_input_string);
      dbms_obfuscation_toolkit.DESDecrypt(
               input_string => wrong_input_string, 
               key_string => wrong_key_string, 
               decrypted_string => decrypted_string );
      dbms_output.put_line('> decrypted string output : ' || decrypted_string);
   EXCEPTION
      WHEN error_in_input_buffer_length THEN
             dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);
   END;
   dbms_output.put_line('>  ');
     dbms_output.put_line('> ========= END TEST STRING DATA =========');
   END;
/

Go to previous page Go to beginning of chapter Go to next page
Oracle
Copyright © 1996-2000, Oracle Corporation.

All Rights Reserved.

Library

Product

Contents

Index