Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Алгоритм Blowfish

Поиск:
Blowfish это 64-битный шифр разработанный Шнайером в 1993 году. Это шифр Файстела, и каждый проход состоит из зависимой от ключа перестановки и зависимой от ключа с данными замены. Все действия основаны на операциях XOR и прибавлениях к 32-битным словам. Ключ может иметь длину до 72 байт (остальная часть ключа в данной реализации не влияет на работу).

Процедура шифрования(дешифрования) состоит из двух этапов:

   1. Инициализация массивов P и S при помощи ключа
   2. Непосредственно шифрование(дешифрование)

Инициализация массивов P и S реализована в блок-схеме initBlowfish.bls. На вход процедуры подается массив Key байтов ключа, размер массива Key передается в переменной n. В процедуре используется массив случайных величин RandomSeed, каждый из элементов которого имеет тип LongInt(= array [0..3] of byte). Следует заметить, что массив RandomSeed должен быть задан заранее и остается неизменным при шифровании(дешифровании). Использование массива RandomSeed не является обязательным, возможна инициализация массивов P и S случайными величинами напрямую.

Непосредственно шифрование осуществляется процедурой реализованной блок-схемой EncryptBlowfish.bls. Шифруются последовательно пары элементов Xl, Xr типа LongInt. При шифровке изменяется также содержание массивов P и S.

Операция дешифровки реализована в блок-схеме DecryptBlowfish.bls. Эта процедура аналогично дешифрует последовательно пары элементов Xl, Xr типа LongInt.

Таким образом, чтобы зашифровать/расшифровать некий массив 32-х битных величин, надо вначале инициализировать массивы (InitBlowfish) P и S, а затем последовательно подавать на вход процедуры шифровки(EncryptBlowfish)/дешифровки(DecryptBlowfish) пары элементов, при этом по ходу работы алгоритма шифрации/дешифрации массивы P и S будут постоянно изменяться.

Если данные блок-схемы напрямую экспортировать в Паскаль, они составят рабочий модуль шифровки/дешифровки на основе алгоритма Blowfish, но естественно не дадут слишком хороший результат по скорости работы. Желательно провести оптимизацию алгоритмов используя тот факт, что работа осуществляется с 32-битными величинами и следовательно можно существенно оптимизировать процедуры для машин c процессорами типа Pentium. Хотя следует заметить, что использование данных процедур напрямую, не вызвало видимой задержки при работе с файлами до 100 кбайт. Оптимизацию я оставляю Вам, свою же задачу я вижу в ознакомлении с данным алгоритмом.






Просмотров: 5858

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную