| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Шифрование данных |
| Автор: Vit 16.4.2002, 23:25 | ||
Пример шифрования данных на Дельфи
|
| Автор: Chingachguk 17.4.2002, 01:05 |
| Мне кажется, у этого алгоритма есть два недостатка: 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 ! И это - фатальный недостаток. |
| Автор: Vit 17.4.2002, 02:49 |
| Спасибо, Chingachguk, именно это я хотел бы и услышать. Естественно это код не мой - я в асемблере совсем не очень, но я его нашел где-то, уже не помню где, и использую совместно с контрольной суммой - т.е. примерно это выглядит как: 1. Вычисляется контрольная сумма 2. Контрольная сумма дописывается к данным 3. Все это шифруется этим алгоритмом {по условиям задачи мне нужны в зашифрованном виде только латинские буквы и цифры, никаких спец-символов отсюда следующий шаг} 4. Массив я разбиваю по 5 бит, каждая комбинация из 5ти битв имеет значение "Большие латинские буквы+Малые латинские буквы+цифры+пара знаков" Расшифровка проводится в обратном порядке + я сравниваю значение повторно вычисленной контрольной суммы с прочитанным... Ты не мог бы подумать как исправить/дополнить алгоритм для улучшения степени защиты? Мне это в общем не обязательно - здесь у меня защита от чайника, чтоб просто предупредить изменение в ручную некоторых параметров, собственно для внутреннего пользования, так что о настоящей защите от взлома речь не идет, но может кому надобна и более суровая защита. |
| Автор: Chingachguk 17.4.2002, 13:17 |
| Вообще-то лучше использовать известные алгоритмы шифрования. Это не только мое мнение, самое главное - таких людей, как Крис Касперски Я не особо разбираюсь в этой области. Лично могу порекомендовать RC4 - он прост, легко реализуется(не более экрана на Паскале), быстр. Разумеется, есть более современные и улучшенные алгоритмы - ну там DES или что-то в этом духе. А как улучшить данный алгоритм - так надо ПЕРЕМЕШИВАТЬ ВСЕ символы пароля в ходе шифрования. Необходимо, чтобы КАЖДЫЙ символ пароля по возможности участвовал в зашифровке каждого символа шифруемой последовательности. Тогда число вариантов для перебора резко увеличится. |
| Автор: Over G 17.4.2002, 13:37 |
| А вы не скажите, как потом шифрованный текст или ещё что РАШИФРОВАТЬ? |
| Автор: Chingachguk 17.4.2002, 13:44 |
| Каким именно алгоритмом зашифрованный ? Стандартные ведут себя так: Зашифрованный текст = RC4(текст, пароль); Расшифрованный текст = текст = RC4(Зашифрованный текст, пароль); Одна и та же функция ! |
| Автор: Vit 17.4.2002, 14:23 |
| А где его взять этот RC4? Может можешь на форум бросить процедурку? |
| Автор: Chingachguk 17.4.2002, 15:35 | ||
Вот ниже отрывок из моей статьи по защите файлов в Excel. Статья была не совсем на тему RC4 и я не спец, так что извините, если что не так:
|
| Автор: neutrino 18.4.2002, 10:03 |
| Кто нибудь может ответить на такой вопрос. На сколько хорош следуюший алгоритм шифровки: 1) пользуясь определенным методом мешаем таблицу текстових символов (их всего 224) 2) исходный текст воспримем как число в 225-ричной системе счисления и используя перемешанную таблицу (скажем на первом месте - символ $, значит это нуль и.т.д.) переведем это число в 224-х ричную систему счисления. За 225 возьмем какои-нить символ, который в тексте встретиться не может (например код ESCAPE) Как этот шифр можно взломать? Спасибо. |
| Автор: Chingachguk 18.4.2002, 11:55 | ||
Очень плох. (На мой взгляд ! Насколько я понял, речь идет о табличной замене. Пусть 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", то мы ПОДОБРАЛИ три символа из таблицы замены(с некоторой вероятностью, конечно, но есть и другие сочетания)... |
| Автор: neutrino 18.4.2002, 12:39 |
| Нет, ты не правильно меня понял. Ты не должен заменять какие-то буквы на другие в тексте. Надо перемешать как бы сами цыфры. Например, примем, что в десятичной системе не будет (по возростанию) цифр в таком порядке: 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) Ну конечно с десятиричной системой плохой пример Это все конечно применимо только к текстовым данным. |
| Автор: Chingachguk 18.4.2002, 14:15 |
| Все равно не понял до конца ! И чем это отличается от табличной замены ? Ты это имел в виду: Пусть есть 224 символа: a,b,c... = Alpha0[1..224]; Сначала перемешиваем Alpha0 -> Alpha[1..224]; Выполняем табличную замену символов шифруемого текста по Alpha; А дальше ?!... |
| Автор: neutrino 18.4.2002, 15:08 |
| Нет. Короче я тебе в приват напишу поподробнее. То что этот метод работает (шифрует и расшифровывает) это точно. Мне было бы очень интересно знать как его можно взломать. Если тебя не затруднит конечно. Пиво не поставлю, но спасибо скажу |
| Автор: Chingachguk 18.4.2002, 16:01 |
| О'кей ! Можно даже так сделать: Ты высылаешь мне: - зашифрованный текст; - алгоритм шифрования; Я не знаю: - исходного текста; - ключа шифрования(таблицу замен или что там еще); И я пытаюсь открыть его. Если я это сделаю, то алгоритм не очень ... Неплохо было бы, если в исходном тексте будут русские буквы, то хотелось бы, чтоб они были в виндовой кодировке>... ЗЫ А почему вдруг речь зашла о пиве ? |
| Автор: neutrino 18.4.2002, 16:24 |
| Поверь мне, я не капельки не сомневаюсь в твоем проффесионализме, ибо я помню как ты "сделал" программу етого, помнишь, "Кто взломает мой шифр, тому пиво!" (кстати про пиво я отсюда взял). И совсем не претендую на то чтобы этим алгоритмом пользовались в КГБ, ФБР, Мосаде или еше где нибудь. Я просто хотел узнать твоего мнения. Я могу послать тебе зашифрованний текст (но не большой, мне самому будет очень трудно его вручную зашифровать), но что ты имеешь ввиду под словом алгоритм? Программу? У меня ее нет. Все на чистом листе бумаги. Я тебе могу послать описание алгоритма (идею). Так ты согласен? Если да кинь мне сообшение в приват форума. Я тебе очень благодарен за отзыв. До этого никто не брался разбирать мой алгоритм. |
| Автор: Lence 5.8.2006, 17:38 | ||||||
Пользуюсь вот этим ...
в общем я там снизу прикрутил исходники - посмотрите - разберетесь :-) здесь в опен диалог выбираете файл для шифрования и в Edit1 пишете пароль ... и все - шифруется - так же и обратно .... а вот сама паска - заталкайте ее рядышком ...
|