![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Шифрование данных [D5, Win95/98, WinXP]
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, нет (по определению самого термина "шифрование").