Oracle8i Supplied PL/SQL Packages Reference Release 2 (8.1.6) Part Number A76936-01 |
|
DBMS_OBFUSCATION_TOOLKIT , 3 of 3
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.
Table 23-3 and Table 23-4 list the parameters for the DESDecrypt syntax, their modes, types, and descriptions.
Parameter Name | Mode | Type | Description |
---|---|---|---|
input |
IN |
RAW |
Data to be decrypted |
key |
IN |
RAW |
Decryption key |
decrypted_data |
OUT |
RAW |
Decrypted 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".
The DES key length for encryption is fixed at 56 bits; you cannot alter this key length.
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; /
|
![]() Copyright © 1996-2000, Oracle Corporation. All Rights Reserved. |
|