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

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

Шифрование данных [D5, Win95/98, WinXP]


Страницы:   1 2

BDRON ©   (2002-03-05 00:46:00) 

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


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

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

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


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

ОШИБКА!

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


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

Для простоты положим, что у вас, 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-способ"), очень долго и безрезультатно :)

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


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

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


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

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


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

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


Страницы:   1 2

Наверх

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