Пример шифрования данныхDelphi , Синтаксис , ШифрованиеПример шифрования данных
Автор: Vit 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 ! И это - фатальный недостаток. В статье рассматривается пример шифрования данных с помощью процедуры DoEncode, которая использует алгоритм шифрования, уязвимый к методу подбора пароля. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Шифрование ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |