Совершенствование приложений Oracle Forms

Шифрование данных в Oracle Forms

Показывать лекцию целиком

Потребность в шифровании данных существует всегда, так как информация, особенно в наши дни, - это довольно большая ценность. В современных промышленных и корпоративных системах уделяют большое внимание безопасности и конфиденциальности данных. Пакет DBMS_OBFUSCATION_TOOLKIT - это мощный и в то же время простой инструмент для шифрования данных. Этот пакет поддерживается в Oracle начиная с версии 8.1.6. Он состоит из двух основных процедур:

  • DESENCRYPT - эта процедура предназначена для шифрования данных ;
  • DESDECRYPT - эта процедура предназначена для расшифровки данных.
  • Использование пакета dbms_obfuscation_toolkit

  • Выполните скрипт, как показано в листинге 10.1.
    SQL> CREATE TABLE TCRYPT
    2     (val_num number,
    3           val_str varchar2(100))
    4  / Таблица создана.
    SQL> INSERT INTO TCRYPT VALUES (1, 'Oracle Forms')
    2 / 1 строка создана.
    SQL> INSERT INTO TCRYPT VALUES (2, 'Oracle Reports') 
    2 / 1 строка создана.
    SQL> INSERT INTO TCRYPT VALUES (3, 'Oracle Graphics')
    2 / 1 строка создана.
    SQL> INSERT INTO TCRYPT VALUES (4, 'Oracle Portal')
    2 / 1 строка создана.
    SQL> INSERT INTO TCRYPT VALUES (5, 'JDeveloper')
    2 / 1 строка создана
  • Создайте новую форму и сохраните ее как CRYPT.
  • Создайте блок данных на таблицу (рис 10.1) Форма "CRYPT"
  • Находясь в Навигаторе Объектов, перейдите в узел "Программы" и создайте последовательно две функции: ENCRYPT (листинг 10.2) и DECRYPT (листинг 10.3). ENCRYPT - это функция, которая зашифровывает переданную в нее строку, а DECRYPT - это функция, которая расшифровывает указанную строку. Для шифровки и расшифровки данных необходимо знать и использовать ключ.
    FUNCTION encrypt (p_text varchar2,p_key varchar2 )
     RETURN varchar2 IS
     v_text varchar2(2000); 
     v_enc  varchar2(2000); 
    BEGIN
     IF p_text IS NULL THEN 
      RETURN NULL; 
     END IF;
     if p_key IS NULL THEN 
      RETURN p_text;
     END IF;
     v_text:=rpad(p_text,(trunc(length(p_text)/8)+1)*8,chr(0));
     sys.dbms_obfuscation_toolkit.desencrypt( input_string=>v_text,     
           key_string=>rpad(p_key,8,p_key), encrypted_string=>v_enc);
     return v_enc; 
    END ENCRYPT;

    Функция ENCRYPT принимает два параметра, первый из которых - имя шифруемой строки, а второй - это ключ шифрования.

    FUNCTION decrypt (p_text varchar2,p_key varchar2 )
    RETURN varchar2 IS
    v_text varchar2(2000); 
    BEGIN
     IF p_text IS NULL THEN RETURN NULL; END IF;
     IF p_key IS NULL THEN
      RETURN p_text; 
     END IF;
     sys.dbms_obfuscation_toolkit.desdecrypt(
       input_string=>p_text, 
       key_string=>rpad(p_key,8,p_key),  
       decrypted_string=>v_text); 
     RETURN rtrim(v_text,chr(0)); 
    END DECRYPT;
  • Создайте триггер WHEN-BUTTON-PRESSED для кнопки "Зашифровать".
    WHEN-BUTTON-PRESSED
    BEGIN
    :val_str:=encrypt(:val_str,'KeyCrypt');
    END;
  • Создайте триггер WHEN-BUTTON-PRESSED для кнопки "Расшифровать".
    WHEN-BUTTON-PRESSED
    BEGIN
    :val_str:=decrypt(:val_str,'KeyCrypt');
    END;
  • Запустите форму на выполнение. Выберите данные и попробуйте их зашифровывать и расшифровывать. Вы можете шифровать данные по какому-либо условию, например, в триггерах POST-QUERY или WHEN-NEW-RECORD[ITEM]-INSTANCE. Ниже на рис. 10.2 изображен пример работы формы.
  • (рис 10.2) Пример работы формы
    Вернуться к учебному плану