DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Расшифровывание данных

До сих пор мы только зашифровывали данные, теперь давайте посмотрим, как расшифровать их процедурой DES3DECRYPT и получить исходное значение. В приведенном блоке PL/SQL зашифровывается открытый текст, а затем расшифровывается полученное значение.
Но постойте! Расшифрованное значение отличается от того, которое было зашифровано. Где же ошибка?

Посмотрите на параметры процедуры DES3DECRYPT. Вы передали ей вектор инициализации? Так как вектор инициализации был указан при зашифровывании, он должен быть также указан и при расшифровывании. Перепишем этот блок, используя вектор инициализации 12345678:

Если при зашифровывании вы используете вектор инициализации, то вы должны указать тот же самый вектор при расшифровывании.

В результате выполнения получим:
В некотором смысле вектор инициализации выступает в качестве ключа или его части, но он не может заменить собой ключ как таковой. Почему? Рассмотрим следующий пример.
Данные были зашифрованы с вектором инициализации 12345678, а расшифрованы с вектором 1234567X, отличающимся только восьмым символом. Из-за этого расшифрованное значение отличается от исходного: в восьмой позиции вместо буквы e появился непечатаемый символ.
Несмотря на отличие полученного текста от оригинала, его угадывание облегчается за счет перебора значений вектора инициализации; данная процедура называется атака методом грубой силы. В силу того, что векторы инициализации обычно короче, чем ключи, такое угадывание займет намного меньше времени. Поэтому не стоит полагаться на использование этого вектора в качестве ключа.
Вектор инициализации всего лишь изменяет шифруемый открытый текст во избежание повторов; он не может служить заменой ключу шифрования.
 









jAntivirus