Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 773

•  TDictionary Custom Sort  5 887

•  Fast Watermark Sources  5 682

•  3D Designer  8 445

•  Sik Screen Capture  6 020

•  Patch Maker  6 468

•  Айболит (remote control)  6 461

•  ListBox Drag & Drop  5 318

•  Доска для игры Реверси  94 875

•  Графические эффекты  6 666

•  Рисование по маске  5 772

•  Перетаскивание изображений  4 842

•  Canvas Drawing  5 219

•  Рисование Луны  4 944

•  Поворот изображения  4 485

•  Рисование стержней  3 179

•  Paint on Shape  2 425

•  Генератор кроссвордов  3 299

•  Головоломка Paletto  2 607

•  Теорема Монжа об окружностях  3 391

•  Пазл Numbrix  2 245

•  Заборы и коммивояжеры  2 901

•  Игра HIP  1 873

•  Игра Go (Го)  1 785

•  Симулятор лифта  2 121

•  Программа укладки плитки  1 853

•  Генератор лабиринта  2 289

•  Проверка числового ввода  1 978

•  HEX View  2 287

•  Физический маятник  1 954

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Пример шифрования данных



Автор: Vit
WEB сайт: http://forum.vingrad.ru

procedure DoEncode(var Source: string; const Key: string);
asm
 Push ESI
 Push EDI
 Push EBX
 Or EAX,EAX
 Jz @Done
 Push EAX
 Push EDX
 Call UniqueString
 Pop EDX
 Pop EAX
 Mov EDI,[EAX]
 Or EDI,EDI
 Jz @Done
 Mov ECX,[EDI-4]
 Jecxz @Done
 Mov ESI,EDX
 Or ESI,ESI
 Jz @Done
 Mov EDX,[ESI-4]
 Dec EDX
 Js @Done
 Mov EBX,EDX
 Mov AH,DL
 Cld
 @L1:
 Test AH,8
 Jnz @L3
 Xor AH,1
 @L3:
 Not AH
 Ror AH,1
 Mov AL,[ESI+EBX]
 Xor AL,AH
 Xor AL,[EDI]
 Stosb
 Dec EBX
 Jns @L2
 Mov EBX,EDX
 @L2:
 Dec ECX
 Jnz @L1
 @Done:
 Pop EBX
 Pop EDI
 Pop ESI
end;

Комментарий от Chingachguk'a

Мне кажется, у этого алгоритма есть два недостатка:

1) Код, сильно зависимый от компилятора. Далеко не всегда регистр EAX будет указывать на ячейку с адресом Source, а регистр EDX - на пароль(Key). Но это мелочь.

2) Единственный байт гаммы(или ксорирующей последовательности), который меняется при шифровании - это длина пароля. Остальные символы пароля НИКАК НЕ ПЕРЕМЕШИВАЮТСЯ в ходе шифрования. Алгоритм шифрования примерно такой:

Len := Lengh(Key);
Index := Lengh(Key) - 1;
i := 1;
repeat
  Len := func1(Len);
  Source[i] := (Key[Index] xor Len) xor Source[i];
  dec(Index);
  if Index := 0 then
    Index := Lengh(Key) - 1;
until
  i < Lenght(Source);

Нетрудно видеть, что основной для тупого подбора является длина пароля. Пусть она равна 10. Очевидно, что 1-ый,11,21.. символы будут зашифрованы ОДИНАКОВЫМ значением Key[Index], но разными значениями Len. Казалось бы, Len для 1,11,21... будет разным, но это ерунда - ведь Len вычисляется однозначно на ЛЮБОМ шаге через реккурентный закон func1 !

И это - фатальный недостаток.





Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid

Экспорт баз данных в Excel

 

База данных "Книжный магазин"

База данных Видеофильмов

База данных "Школа"

База данных без BDE

 

База данных студентов

Фильтрование данных

Pevrica (сжатие данных)




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте