Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Вниз

Шифрование данных 


BDRON   (2002-03-05 00:46) [0]

Подскажите, плз, простой способ автошифрования данныз в текстовом файле, либо сопоб прочтения данных только моей программой.



lipskiy   (2002-03-05 00:53) [1]

Самый простой - XOR, примитивнее некуда. Но толку мало. Можно еще проинвертировать байты, или/и переставить их задом наперед. Только это все фигня, а не шифрование. Для нормального шифрования простых способов, IMHO, нет (по определению самого термина "шифрование").



Фэ   (2002-03-05 01:01) [2]

2lipskiy
Это все словеса и не более.
2BDRON
Прежде всего уясни от кого собираешься сокрыть контент.
Если обычный пользователь - то подойдет любой, самый простой способ. XOR, замена символов по таблице, а вот еще простой, но действенный - магический квадрат.



Фэ   (2002-03-05 01:04) [3]

Вот два взгляда на одну и ту же шифрованную страницу и не..
http://www.pi8plus.ru/win/cry/index.htm
http://www.pi8plus.ru/win/cry/idx.htm



Kettle of delphi   (2002-03-05 04:20) [4]

Для простоты положим, что у вас, BDRON, есть Form1, на которой лежат: Memo1(для отображения текста), Edit1(для кодового слова), Button1(для кодирования), Button2(для раскодирования).
Для удобства, поставьте для Memo1, в инспекторе объектов, Properties: ScrollBars -> ssVertical.

===
Общий принцип следующий:
В компьютере каждая буква имеет свой индекс (т.е. - число)...
В паскале существуют две функции, которые могут вам подойти:
1. Ord(X): Longint - возвращает индекс буквы. Например, Ord("a") даст число 97.
2. Chr(X: Byte): Char - возвращает букву по индексу. Например, Chr(97) даст букву "а" (без ковычек, конечно).

===
Метод реализации такой:
Вы вводите текст в Мемо1 (например, через контекстное меня Вставить), указываете кодовое слово в Edit1 и нажимаете на Button1 (для кодирования).

Нажатие на Button1 обрабатывается по такому алгоритму:
(необходимо дополнительно предусмотреть несколько моментов [например (этот момент реализован коде ниже): функция Ord(Memo1.Text[i] вернула, например, цифру 9. тогда, при конвертации в строку, цифру нужно сохранить не как 9, а как "009" (потому что при обратном раскодировании мы будем считывать по 3 знакоместа сразу!)]).
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; CryptStr: String;
begin
CryptStr := "";
for i := 0 to Length(Memo1.Text) do begin
if IntToStr(Ord(Memo1.Text[i])) = 1 then CryptStr := CryptStr + "00" + IntToStr(Ord(Memo1.Text[i]));
if IntToStr(Ord(Memo1.Text[i])) = 2 then CryptStr := CryptStr + "0" + IntToStr(Ord(Memo1.Text[i]));
if IntToStr(Ord(Memo1.Text[i])) = 3 then CryptStr := CryptStr + IntToStr(Ord(Memo1.Text[i]));
end;
Memo1.Text := CryptStr;
end;


Если нужно сделать кодирование более "стойким" к взлому - можно в Edit1 ввести кодовое слово и "прикладывать" его (последовательно) к содержимому Memo1.

Здесь я описал общий принцип очень простой кодирующей системы. Современные криптоаналитические компьютеры "сломают" такой код за время, ЗНАЧИТЕЛЬНО меньше секунды. Но ваша сестра(?), скорее всего, будет с ним биться (если вы примените "Edit1-способ"), очень долго и безрезультатно :)

Если вы хотите сами написать код, выполняющий стойкое кодирование, то это так же "просто" сделать, как, например, написать игру, типа Дума :)



Kettle of delphi   (2002-03-05 04:25) [5]

ОШИБКА!

Выше всюду, где есть if IntToStr(Ord(Memo1.Text[i])) , должно быть if length(IntToStr(Ord(Memo1.Text[i]))) - т.е., мы узнаем длину(length) текстового выражения IntToStr(Ord(Memo1.Text[i])).



USAtyj   (2002-03-05 10:30) [6]

А не прощще ли вместо всех этих if написать:

CryptStr := CryptStr + Format("%.3d",[Ord(Memo1.Text[i])]);



BDRON   (2002-03-05 18:25) [7]

Спасибо за помощь



Qertunewowe   (2002-03-05 18:39) [8]

А как тогда сделать расшифровку ведь CHR поддерживает только BYTE



Kettle of delphi   (2002-03-05 18:51) [9]

Сначала расшифровать до правильных индексов, а потом применить CHR :)



Qertunewowe   (2002-03-05 18:55) [10]

Если не трудно приведите пример.
ЗА РАНЕЕ БОЛЬШОЕ СПАСИБО!!!!



BDRON   (2002-03-05 19:57) [11]

>>Qertunewowe Присоединяюсь :)



Kettle of delphi   (2002-03-05 20:03) [12]

Код труднее понять, чем алгоритм. А алгоритм такой:

Пусть, для примера, шифровка есть 375135092 - т.е. три буквы, каждая из которых зашифрована:
1-я буква: 337
2-я буква: 135
3-я буква: 292

Требуется расшифровать.
Т.к., по условию, шифровка образована сложением индекса каждой буквы шифруемого текста с индексом кодового слова (для простоты, давайте считать, что кодовое слово состоит из одной буквы, имеющей индекс 100), то алгоритм расшифровки следующий:
1. От шифровки первой буквы отнимаем индекс нашей кодовой буквы:
337 - 100 = 237. Этот результат теперь можно передать функции Chr.
2. От шифровки второй буквы отнимаем индекс кодовой буквы:
135 - 100 = 35. Этот результат так же можно передать функции Chr.
3. 292 - 100 = 192; Chr(192).

Вот такой алгоритм :)



Kettle of delphi   (2002-03-05 20:08) [13]

Опять ошибка! :)))

Вместо этого:
Пусть, для примера, шифровка есть 375135092

Должно быть:
Пусть, для примера, шифровка есть 337135292



PPPPPPPPPPPP   (2002-03-05 20:11) [14]

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



BDRON   (2002-03-05 20:12) [15]

А как быть если индекс кодовой буквы больше индеса зашифрованной буквы?



BDRON   (2002-03-05 20:21) [16]

>>PPPPPPPPPPPP
Поясните, если я найду среднее арифметическое, то тем самым смешаю все числа в кучу (останется только одно число), а как потом можно будет расшифровать?



PPPPPPPPPPPP   (2002-03-05 20:33) [17]

В том то и дело, дпустим вы сделали ка я вам сказал, но при этом для расшифровки вы должны знать какое количество символов у вас было там, или можно дописывать его к концу зашифрованной строки, а дальше выполняем все также только наоборот и в результате получаем обычное число, а дальше путем сравнений получаем уже готовы расшифрованный текст



BDRON   (2002-03-05 20:43) [18]

>>PPPPPPPPPPPP
Объясните, плз, что значит путем сравнений. Количество лично мне ничего не даст, у меня будет число и кол-во символов, но вариантов может быть много.



wicked   (2002-03-05 20:44) [19]

2 Kettle of delphi

> Если вы хотите сами написать код, выполняющий стойкое кодирование,
> то это так же "просто" сделать, как, например, написать
> игру, типа Дума :)


и кто тебе такое сказал?.... реализовать нормальный алгоритм шифрования может даже старшекласник или студент младших курсов... а уж самих алгоритмов шифрования придумано ну ОЧЕНЬ много...



pppppppppppp   (2002-03-05 20:51) [20]

К примеру, в одном масиве ты будешь хранить все буквы по алфавиту, в другом к примеру символ соотвтествующий этой букве, вот допустим буква А и символ 10 на тове усмотрение это, дальше мы по буквенно берем твой текст и сраниваем, если эта буква есть в массиве, где у нас все буквы по алфавиту, то берем число из другого массива с таким же порядковым номером, и в результате у нас полуается нескольеко целых цилес, а что делаем дальше уже понятно.

ДУм легче писать :)



BDRON   (2002-03-05 20:51) [21]

>>wicked
Я отношусь к даже старшекласник , поэтому и релизю :)



BDRON   (2002-03-05 21:03) [22]

>>pppppppppppp
Это понятно, а вот как из целого числа получить буквы, ведь я все целые числа сложу и останется только одно.



wicked   (2002-03-05 21:12) [23]

2 BDRON

ну так в чём проблема?... найди хорошее описание алгоритма и вперёд... например, в своё время, нас в институте заставили реализовать алгоритм по ГОСТу... оказывается, всё гораздо проще, чем кажется... хотя есть алгоритмы, представляющие известные трудности, например несимметричные (с открытым и закрытым ключём)..



Kettle of delphi   (2002-03-05 22:31) [24]

2 wicked ©:

"Каждый, кто думает, что изобрел непробиваемую схему шифрования, - или невероятно редкий гений, или просто наивен и неопытен...
Каждый программист воображает себя криптографом, что ведет к распространению исключительно плохого криптообеспечения..."
/Ф. Зиммерманн/
----------------------------------------------------------------
2 BDRON:

>А как быть если индекс
>кодовой буквы больше
>индеса зашифрованной буквы?
-----

Это не имеет значения! Пусть индекс буквы, которую мы хотим закодировать, есть 5; индекс буквы, которая будет паролем, есть (70). Тогда: 5 + (70) = 75. Результат 75 есть наша закодированная буква с индексом 5. для ее раскодирования делаем так: 75 - (70) = 5.

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



wicked   (2002-03-06 00:09) [25]

2 Kettle of delphi
гы... :) а я и не говорю, что изобрёл... речь шла о реализации известного и уже придуманного другими алгоритма... точка...



BDRON   (2002-03-06 20:46) [26]

2 Kettle of delphi

Теперь кажется понял, а вот про психологическую травму это вы напрасно :) Большое всем спасибо!




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.78 MB
Время: 0.032 c
14-66976          ATLANTIDO             2002-02-05 00:46  2002.03.21  
ХАКЕРСТВО НЕ В ЗАКОНЕ ?


7-67029           ene                   2001-12-21 18:04  2002.03.21  
ComPort busy???


3-66728           volodya_              2002-02-20 16:39  2002.03.21  
Как поменять формат вывода?


1-66914           Kozhanov              2002-03-04 11:30  2002.03.21  
Задержка повторения символа.


7-67018           Shadow77              2001-12-17 16:46  2002.03.21  
MMSYSTEM274 Используемое устройство MCI...