Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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

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



Страницы: 1 вся ветка

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

Наверх





Память: 0.52 MB
Время: 0.006 c
3-66725
volodya_
2002-02-20 16:48
2002.03.21
Вопрос по SQL запросам


3-66723
volodya_
2002-02-20 11:43
2002.03.21
Помогите с кодировкой


1-66830
Gayrus
2002-03-07 16:20
2002.03.21
Form s events


1-66916
Random
2002-03-06 16:14
2002.03.21
Как создать панель инструментов


7-67021
IIL
2001-12-19 14:16
2002.03.21
Разрешение экрана





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский