Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как можно шифровать текст в Memo ListBox RichEdit перед сохранением на диск. А при чтении расшифровывать. Чтоб никто не читал его. Желательно чтобы было быстро и просто. [D5, WinME]


Страницы:   1 2 3

дикое Кенгуру ©   (2002-02-27 08:38:00) 

Как можно шифровать текст в Memo ListBox RichEdit перед сохранением на диск. А при чтении расшифровывать. Чтоб никто не читал его. Желательно чтобы было быстро и просто.


Kettle of delphi   (2002-02-28 13:13:00) [21]

У меня вопрос к Shirson:
А какой смысл описан в абзаце "Если принять то, что нужно ..." кроме того, что злоумышленнику требуется уже 2 цели поймать? Куда надежнее не дискетку с файлом ключа в карман положить, а само сообщение записать на дискетку и положить его в карман :)
Ведь второй раз ленту однократногоиспользования не применяют! )))


Shirson   (2002-02-28 12:50:00) [22]

>Poirot

Так, давайте не будем выяснять кто на кого и как посмотрел и вернемся к: "И вообще - я пытаюсь выяснить прелести и недостатки, т.к. это моя будущая специальность... В споре рождается истина (кто-то говорил)..."
(Чесно говоря, лекции по криптографии не фходили в мои планы на сегодня :))

Итак, имеем XOR. Как я уже говорил и как верно заметил Reindeer Moss Eater, сообщение зашифрованное с ключем, длинною, равной длине сообщения, не поддается вскрытию впринципе. Если ключ сформирован генератором случаных чисел с равномерным распределением (принимаем что период генератора >> длины ключа), на выходе мы получаем набор случайных чисел с равномерным распределением. Частотный анализ, как врочем и любой другой тут совершенно бессильны. Даже элементарный перебор не дает возможности вскрытия, из-за неоднозначности трактовки результатов (тот же пример Reindeer Moss Eater)
То что вас, Poirot, возмутило (или удивило?) что длина ключа равна длине сообщения - для меня загадка. Практика современной криптозащиты использует этот метод на всю катушку. Если же использовать однобитный ключ, или ключ, длина которого << длины сообщения, смысла в таком кодировании ровно 0 и упоминать о нем я просто не видел смысла.

Из вышесказанного встает вопрос, если XOR такой замечательный, то почему его не используют в пром.криптографии?
Есть несколько минусов:
Первый - реверсивность кодера. Если кодеру скормить криптованный текст, при наличии ключа получим декриптованное сообщение. Это неприемлемо.
Второй - один ключ. Т.е. нет понятий открытого/закрытого ключа.
Наглядный пример.
Некто А обладает открытым ключем и посылает сообщение к Б.
Открытый ключ это русско-английский словарь. С его помощью русское сообщение переводится на английский и по незащищенному каналу отсылается к Б.
Сколько бы человек не приняло это сообщение и сколько бы из них не имело русско-английского словаря, дешифровать сообщение они не смогут в разумные сроки. (я у трирую, главное общий смысл)
Однако Б имеет закрытый ключ: англо-русский словарь. С его помощью он дешифрует сообщение А в первоночальный вид.
Такая система не ломается нахрапом, даже если у злоумышленника есть сообщение, кодировщик и ключ, с которым это сообщение было зашифровано.

Если принять то, что нужно дикому Кенгуру, можно решить задачу так:
На первом этапе вставляем в дисковод дискетку и формируем на ней байтовый файл из генератора случайных чисел. Длина файла пусть 1024 кБ (не жалко :) )
На втором этапе, сформированным ключем кодируем текст по методу XOR, необходимый для шифровки и сбрасываем его на винт.
На третьем вынимаем дискетку и прячем запазуху.
Теперь мы можем быть совершенно уверены, что если злоумышленник не получит дискетки, ему ни вжисть не прочитать, что мы записали.

Обратная операция проста - считываем с винта криптованный файл, с дискеты грузим ключ и им, все тем же XORом, декодируем текст.

Я надеюсь, Poirot, между нами нет больше недопонимай? Или есть? :) Тогда пишите.


Poirot   (2002-02-28 12:10:00) [23]

> Shirson
> Сказанного и написанного кем и где? Я, если честно, неуловил
> к чему это сказано.

Поздравляю!!! Наезд на меня - а причину забыли??? Прикольно
См. дикое Кенгуру

> Выгодность длины ключа определяет задача.

А я про что-то другое говорил???

Ваши слова:

> Имея ключ шифрования равный или больший по длине самому
> сообщению, XOR выдаст шифрованный текс без каких-либо закономерностей.

и далее

> Если ты не "бабушка из соседней избушки, которая только
> о грамофоне и знает", могу прислать тебе файлу скажем кило
> на 10 зашифрованную XOR :) Возьмешься за декрипт? ;) Защита
> ведь ламерская, всего 4*10^1022 вариантов ;))))))))

Логично предположить -> как и что вы шифровать собрались!!!


> И скажите, при каких условиях ключ нужно хранить не в укромном
> месте? В мозгах что-ли?

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

И вообще - я пытаюсь выяснить прелести и недостатки, т.к. это моя будущая специальность... В споре рождается истина (кто-то говорил)...


Reindeer Moss Eater   (2002-02-28 11:16:00) [24]

Ребята, XOR на ключе длиной равной длине сообщения (код Г.Вернама) - абсолютно невскрываемый шифр.
Это значит, что вот такой криптотекст: <hdsjghldjghdljghsd>
на одном ключе раскриптуется как "еду в на север", а на другом как "еду на юг"
И нет математических способов определить какой вариант более вероятен.
Другое дело, что пользоваться таким шифром на практике очень трудно.


Shirson   (2002-02-28 11:04:00) [25]

>Poirot
Выгодность длины ключа определяет задача. И скажите, при каких условиях ключ нужно хранить не в укромном месте? В мозгах что-ли? Гхм... вот это уже дилетанство, если честно.
Сказанного и написанного кем и где? Я, если честно, неуловил к чему это сказано.
"За декрипт" что? Пояснее сформулируйте к чему это.


Poirot   (2002-02-28 09:10:00) [26]


> Shirson ©

Ключ больше или равен... Хотите сказать что но сообщение в 10 кило у ВАС ключ на что-то большее... Да? Это невыгодно... ВАМ и ключ предётся в укромном месте держать... или у ВАС хватит памяти на точное запоминание 10*1024 символов... Дерзайте...
Во-вторых я говорил в том числе и о несоответствии сказанного и написанного... вы с этим не согласны... т.е. он использует чистый XOR...
За декрипт????? Как говорит наш препод по методам оптимизации - "За принцип что-то делают только идиоты" Я теоретик, а не практик... а то зачем мне к словам придераться...


Shirson   (2002-02-28 08:06:00) [27]

>Poirot "Что то я вас не понимаю... Что значит не поддаётся впринципе...
По моему скромномку мнению - XOR - самая ламерская защита... так сказать на бабушку из соседней избушки, которая только о грамофоне и знает...
"

:)
Имея ключ шифрования равный или больший по длине самому сообщению, XOR выдаст шифрованный текс без каких-либо закономерностей. Т.е. ты будешь знать только длину сообщения. И декрипт будет сводиться к простому перебору всех возможных комбинаций символов, причем без возможности ОДНОЗНАЧНОЙ раскодировки.
Если ты не "бабушка из соседней избушки, которая только о грамофоне и знает", могу прислать тебе файлу скажем кило на 10 зашифрованную XOR :) Возьмешься за декрипт? ;) Защита ведь ламерская, всего 4*10^1022 вариантов ;))))))))
И можешь неверить в простоту сколько угодно, но старина Оккам был прав :)

Насчет промышленной криптограйии. XOR тут неподходит по нескольким причинам.
Для него отсутствует понятие открытый/закрытый ключ. Например для нашего банка это неприемлемо.
Криптовалка является и декриптовалкой. Плюс в простоте выливается в минус при использовании. Имея криптовальщик и ключ сообщение дешифруется на ура. В системе с открытым ключем - шишь.
Длина криптованого и декриптованого сообщения равны - не то что-бы гиганский минус, но неочень нехорошо.
Вот, в общих чертях.
С математической точки зрения XOR если не идеален, то очень хорош. С практической точки зрения вклинивается много факторов, например человеческий, которые мешают использовать XOR в голом виде. А для внутрипрограммном кодировании - да лучше и ненужно.


Poirot   (2002-02-28 07:36:00) [28]

> дикое Кенгуру
У важаемый Вы сами разницу уловите или вам пояснить....
Что значит не одним символом.... в код посмотрите... А сложность взлома не определена не XOR а тем что у неё по оби стороны... А как я понял выше говорилось о A XOR B, где A B -простые значения -const...А у вас функции - отличать надо...
Для вас помоему разницы между
A + B и A mod C^8 + A mod 2^32нет - т.е. тут шифруется плюсом.... ууууаааууу
Хотя стойкость первого на несколько порядков ниже....
И тем более в коде работа идёт именно по байтого и никак не более
Так-что ваше заявления является ламерски...
И ключ вам надо в вашей голове хранить - лажа
Посеять его как нефига делать... то же шифровать надо... но чем тем же - опять пароль запоминай... у попа была СоБаКа он её...


дикое Кенгуру   (2002-02-28 05:01:00) [29]

Poirot

xor можно делать не только одним символом.
из Rx :

function XorEncode(const Key, Source: string): string;
var
I: Integer;
C: Byte;
begin
Result := "";
for I := 1 to Length(Source) do begin
if Length(Key) > 0 then
C := Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Byte(Source[I])
else
C := Byte(Source[I]);
Result := Result + AnsiLowerCase(IntToHex(C, 2));
end;
end;

function XorDecode(const Key, Source: string): string;
var
I: Integer;
C: Char;
begin
Result := "";
for I := 0 to Length(Source) div 2 - 1 do begin
C := Chr(StrToIntDef("$" + Copy(Source, (I * 2) + 1, 2), Ord(" ")));
if Length(Key) > 0 then
C := Chr(Byte(Key[1 + (I mod Length(Key))]) xor Byte(C));
Result := Result + C;
end;
end;


дикое Кенгуру   (2002-02-28 04:52:00) [30]

McSimm
Точно ! Очень полезная вещь оказалась.

включаю в проэкт файл StrUtils.pas
записываю StrUtils в uses.
и

procedure TForm1.Button1Click(Sender: TObject);
begin //Шифрую словом "KeyString"
Memo1.Text := XorEncode ( "KeyString" , Memo1.Text );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin //Расшифрую словом "KeyString"
Memo1.Text := XorDecode ( "KeyString" , Memo1.Text );
end;

-------------
Оказалось что в StrUtils ещё куча полезных функций. Какие открытия я для себя делаю !


Poirot   (2002-02-27 20:16:00) [31]


> Shirson ©

Что то я вас не понимаю... Что значит не поддаётся впринципе...
По моему скромномку мнению - XOR - самая ламерская защита... так сказать на бабушку из соседней избушки, которая только о грамофоне и знает...
А в методы шифрования без каких-либо умных знаний не верю...
Самое что ненаесть простое и дельное это в крайнем случае CRC32 или используя компоненты для Делфей - PGP


Shirson   (2002-02-27 17:59:00) [32]

>KvORubin

А смысл? Я же сказал, обычный XOR шифрует сообщения, тем более такой длины, так, что расшифровке не поддается впринципе.


panov   (2002-02-27 17:55:00) [33]

>дикое Кенгуру (27.02.02 08:38)
Поищи компоненты на Torry.
Можешь взять компонент на www.crypto-central.com


KvORubin   (2002-02-27 17:15:00) [34]

Ребята Ребята, вы о какой-то (извените за выражение)фигне болтаете,, совсем откланились от темы, мне тоже интересно бы знать (подробней) как зашифровать текст.

Если хотите, то пишите мне на KvORubin@Mail.ru я написал прошку, которая очень сложно шифрует текст, но тем не менее я уверен, что зашифрованный и посланный мною Вам текст Вы ФИГрасшифруете, а кому всё-же удастся, тому даю исходник.

А вот текст в котором что-то написанно, прочитайте:

±‘КѓЗ“’Р’ХЋР‹ВВН
Ф†С†ТќђК™КБОЋЗБПЃмXр4D
Pб/K
W
КБбБФ†Г†…ВЌ‰У–Р…П‰МБЯ“Р„РБډ֑“БВП


Reindeer Moss Eater   (2002-02-27 13:58:00) [35]

Чтобы твой будущий продукт лицензировали, надо сначала получить лицензию на ЭТОТ вид деятельности.


Shirson   (2002-02-27 13:47:00) [36]

Не то что-бы обс, а скорее звон не там.
Лицензировать нужно продукт (именно криптования), который выбрасываешь на рынок. Он должен удовлетворять кучке требований и законов. А то что я в своей программе наворочу криптовалку - постелить я хотел на закон, если я не собираюсь продавать свою прогу под грифом "Супа-Шмупа-Хупа-Криптавальник отвечающий требованиям С2 и всего остального".

А при длине ключа в килобайт ломануть даже обычный XOR - весьма проблемно. Особенно если понятия не имеешь о том, какова же именно длина ключа. А при длине ключа >= длине сообщения эта затея вообще превращается в рулетку.


McSimm   (2002-02-27 13:01:00) [37]

>Reindeer Moss Eater (27.02.02 12:46)

Это точно? Или по сведениям ОБС?
Нельзя ли сослаться на норму или статью?


Reindeer Moss Eater   (2002-02-27 12:46:00) [38]

>McSimm
Вся деятельность по разработке средств стойкого крипто ("чтобы никто не читал") подлежит строгому лицензированию со стороны Государства.


McSimm   (2002-02-27 10:26:00) [39]

>Reindeer Moss Eater (27.02.02 08:45)
Можно подробнее про закон?

>дикое Кенгуру (27.02.02 08:38)
Быстро и просто текст можно шифровать функциями RX-Lib: XorEncode (обратно - XorDecode). На выходе - текст, в качестве ключа - строка (а не символ).


Pete   (2002-02-27 09:09:00) [40]

Можно и так:
a:array [0..255] of integer; //заполняешь под RND от 0..255
b:array [0..255] of integer;

только от 0 до 32 a[i]:=i;
for i:=33 to 255 do begin
c:=a[i];
b[c]:=i;
end;

берешь значение символа и заменяешь его из массива а
обратно заменяешь из массива b


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо