Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование данных, Пример кода 
V
    Опции темы
Vit
Дата 16.4.2002, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Пример шифрования данных на Дельфи :D :D :D :D

Код

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;



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 17.4.2002, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



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

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 !

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


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Vit
Дата 17.4.2002, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Спасибо, Chingachguk, именно это я хотел бы и услышать. Естественно это код не мой - я в асемблере совсем не очень, но я его нашел где-то, уже не помню где, и использую совместно с контрольной суммой - т.е. примерно это выглядит как:

1. Вычисляется контрольная сумма
2. Контрольная сумма дописывается к данным
3. Все это шифруется этим алгоритмом
{по условиям задачи мне нужны в зашифрованном виде только латинские буквы и цифры, никаких спец-символов отсюда следующий шаг}
4.  Массив я разбиваю по 5 бит, каждая комбинация из 5ти битв имеет значение "Большие латинские буквы+Малые латинские буквы+цифры+пара знаков"

Расшифровка проводится в обратном порядке + я сравниваю значение повторно вычисленной контрольной суммы с прочитанным...

Ты не мог бы подумать как исправить/дополнить алгоритм для улучшения  степени защиты? Мне это в общем не обязательно - здесь у меня защита от чайника, чтоб просто предупредить изменение в ручную некоторых параметров, собственно для внутреннего пользования, так что о настоящей защите от взлома речь не идет, но может кому надобна и более суровая защита.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 17.4.2002, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Вообще-то лучше использовать известные алгоритмы шифрования. Это не только мое мнение, самое главное - таких людей, как Крис Касперски ;)

Я не особо разбираюсь в этой области. Лично могу порекомендовать RC4 - он прост, легко реализуется(не более экрана на Паскале), быстр. Разумеется, есть более современные и улучшенные алгоритмы - ну там DES или что-то в этом духе.

А как улучшить данный алгоритм - так надо ПЕРЕМЕШИВАТЬ ВСЕ символы пароля в ходе шифрования. Необходимо, чтобы КАЖДЫЙ символ пароля по возможности участвовал в зашифровке каждого символа шифруемой последовательности. Тогда число вариантов для перебора резко увеличится.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Over G
Дата 17.4.2002, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 30.3.2002

Репутация: нет
Всего: нет



А вы не скажите, как потом шифрованный текст или ещё что РАШИФРОВАТЬ?
PM MAIL   Вверх
Chingachguk
Дата 17.4.2002, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Каким именно алгоритмом зашифрованный ? Стандартные ведут себя так:

Зашифрованный текст = RC4(текст, пароль);

Расшифрованный текст = текст = RC4(Зашифрованный текст, пароль);

Одна и та же функция ! ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Vit
Дата 17.4.2002, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



А где его взять этот RC4? Может можешь на форум бросить процедурку?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 17.4.2002, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Вот ниже отрывок из моей статьи по защите файлов в Excel. Статья была не совсем на тему RC4 и я не спец, так что извините, если что не так:

Цитата

...
Что же такое RC4, MD5 и тому подобные штучки? Схематично их алгоритмы можно представить таким образом — шифруемая информация (последовательность битов) должна быть, с одной стороны, скрыта во множестве “мусора” (тривиальный пример — сложение каждого байта строки с байтами строки-константы), а с другой стороны — рассеяна по полученному множеству таким образом, чтобы связи между шифруемыми битами были потеряны, но не окончательно — ведь еще предстоит проверка (например, меняем четные байты пароля на нечетные).
Возьмем, к примеру, алгоритм шифрования RC4. Он состоит из подготовительной части и самого шифрования.
Пусть у нас есть пароль “Password”.  Формируем две таблицы длиной 256 байтов. Первая (S-таблица) будет вначале содержать числа 0, 1, 2, …, 255, а вторую (K-таблицу) заполним паролем примерно так:

K = “PasswordPassword...”

(пароль ведь может быть меньше 256 байтов). После этого введем индексы i и j, j вначале равен 0. Выполним 256 замен между таблицами:

i = 0,1.. 255, j = (j + S[i] + K[i]) and 255,  xchg S[i],S[j].

Полученная таблица S называется таблицей подстановок.
Теперь пусть есть некоторая информация, которую надо зашифровать — массив байтов  Info[0,1,2…]. Определим два счетчика Q1 и Q2 с начальными значениями 0. При шифрации каждого байта Info[] выполняем следующие действия:

Q1 = (Q1 + 1) and 255, Q2 = (Q2 + S[Q2]) and 255,
xchg S[Q1], S[Q2], T = (S[Q1] + S[Q2]) and 255,
Gamma = S[T],
и,  наконец — вот оно:
Info[..] = Info[..] xor Gamma.

Таким образом, мы формируем таблицу подстановок S и с ее помощью проводим операции “исключающее  ИЛИ” (xor) над элементами шифруемой информации.  Как уже было сказано ранее, четное число операций xor над байтом дает исходный байт. Поэтому достаточно провести еще раз ту же самую операцию над зашифрованным алгоритмом RC4 массивом Info[], чтобы получить исходный Info[].



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 18.4.2002, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Кто нибудь может ответить на такой вопрос. На сколько хорош следуюший алгоритм шифровки:
 1) пользуясь определенным методом мешаем таблицу текстових символов (их всего 224)
 2) исходный текст воспримем как число в 225-ричной системе счисления и используя перемешанную таблицу (скажем на первом месте - символ $, значит это нуль и.т.д.) переведем это число в 224-х ричную систему счисления. За 225 возьмем какои-нить символ, который в тексте встретиться не может (например код ESCAPE)

Как этот шифр можно взломать? Спасибо.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Chingachguk
Дата 18.4.2002, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

neutrino Дата сообщения: 18.4.2002,11:03...
На сколько хорош следуюший алгоритм шифровки:
1) пользуясь определенным методом мешаем таблицу текстових символов (их всего 224)
2) исходный текст воспримем как число в 225-ричной системе счисления и используя перемешанную таблицу (скажем на первом месте - символ $, значит это нуль и.т.д.) переведем это число в 224-х ричную систему счисления. За 225 возьмем какои-нить символ, который в тексте встретиться не может (например код ESCAPE)

Как этот шифр можно взломать? Спасибо.


Очень плох.
(На мой взгляд !;)

Насколько я понял, речь идет о табличной замене. Пусть Alpha[1..224] - таблица перемешанных симолов, Text[1..N] - шифруемая последовательность. Если я правильно понимаю, алгоритм шифровки i-ого символа сведется к:

 CurrChar:=Text[i];
 for j:=1 to 224 do
   begin
      if CurrChar=Alpha[j] then break;
   end;
 Text[i]:=Alpha[j];

Ну или что-то в этом роде. Я правильно понял ?

1) Если я знаю таблицу замены, те Alpha, то ЛЮБОЙ зашифрованный этим алгоритмом текст прозрачен;
2) Если я не знаю таблицу, но знаю способ шифрования.
 Тогда взломщик может поступить так. Предположим, это - английский текст. Тогда в нем почти наверняка встретятся такие сочетания, как "the", "is"...
Как преобразуется "the" ? Очень просто:
 
  t -> Alpha[k1]; h -> Alpha[k2]; e -> Alpha[k3];

Т.е. полагаем неизвестными эти три Alpha[k1..3]; Далее ПЕРЕБОРОМ этих трех неизвестных (всего не более 254 x 254 x 254 вариантов) делаем обратную расшифровку текста. Например, предполагая на очередном шаге:

  Alpha[k1..3] = "a","b","c";

Делаем замену в шифруемом тексте:

   "a" -> "t", "b" -> "h", "c" -> "e",

И анализируем такой текст. Если мы видим в нем эти самые "the", то мы ПОДОБРАЛИ три символа из таблицы замены(с некоторой вероятностью, конечно, но есть и другие сочетания)...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 18.4.2002, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Нет, ты не правильно меня понял. Ты не должен заменять какие-то буквы на другие в тексте. Надо перемешать как бы сами цыфры. Например, примем, что в десятичной системе не будет (по возростанию) цифр в таком порядке: 0123456789, а допустим: 0594837261. Теперь тебе надо зашифровать текст: "938", ты берешь всю эту строку и думаешь, что она в 11-ричной (в этом примере) системе счисления. и переводишь ее в 10-ричную (10 пускай будет - "#", он не встречается в исходном тексте):  
твои новые цыфры:

0 - 0
1 - 5
2 - 9
3 - 4
4 - 8
5 - 3
6 - 7
7 - 2
8 - 6
9 - 1

теперь, у тебя есть текст: "938", ты знаешь, что, например 9 - это 1, 3-4 и 8-6. значит эта строка равна 146 (в 11-ричной системе) и ты ее переводишь в 10-ричную: (146=1*11^2+4*11^1+6*11^0=171)
Ну конечно с десятиричной системой плохой пример :) Так у нас получилось: "171" - это зашифрованный вариант текста "938". Вот и все. Теперь если ты знаешь таблицу цифр по которой мы зашифровивали (0594837261), то расшифровать будет очень просто, если ты знаешь какая цифра кокое значение имеет.
Это все конечно применимо только к текстовым данным.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Chingachguk
Дата 18.4.2002, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Все равно не понял до конца ! ;)

И чем это отличается от табличной замены ? ;)

Ты это имел в виду:

Пусть есть 224 символа: a,b,c... = Alpha0[1..224];
Сначала перемешиваем Alpha0 -> Alpha[1..224];
Выполняем табличную замену символов шифруемого текста по Alpha;

А дальше ?!...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 18.4.2002, 15:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нет. Короче я тебе в приват напишу поподробнее. То что этот метод работает (шифрует и расшифровывает) это точно. Мне было бы очень интересно знать как его можно взломать. Если тебя не затруднит конечно. Пиво не поставлю, но спасибо скажу :) СПАСИБО.
  Вверх
Chingachguk
Дата 18.4.2002, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



О'кей !

Можно даже так сделать:

Ты высылаешь мне:

- зашифрованный текст;
- алгоритм шифрования;

Я не знаю:

- исходного текста;
- ключа шифрования(таблицу замен или что там еще);

И я пытаюсь открыть его. Если я это сделаю, то алгоритм не очень ...
Неплохо было бы, если в исходном тексте будут русские буквы, то хотелось бы, чтоб они были в виндовой кодировке>...

ЗЫ А почему вдруг речь зашла о пиве ? ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 18.4.2002, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Поверь мне, я не капельки не сомневаюсь в твоем проффесионализме, ибо я помню как ты "сделал" программу етого, помнишь, "Кто взломает мой шифр, тому пиво!" (кстати про пиво я отсюда взял). И совсем не претендую на то чтобы этим алгоритмом пользовались в КГБ, ФБР, Мосаде или еше где нибудь. Я просто хотел узнать твоего мнения. Я могу послать тебе зашифрованний текст (но не большой, мне самому будет очень трудно его вручную зашифровать), но что ты имеешь ввиду под словом алгоритм? Программу? У меня ее нет. Все на чистом листе бумаги. Я тебе могу послать описание алгоритма (идею). Так ты согласен? Если да кинь мне сообшение в приват форума. Я тебе очень благодарен за отзыв. До этого никто не брался разбирать мой алгоритм.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.