Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2010, 17:13   #1
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию кривое шифрование memo

Всем привет. мне нужно зашифровать текст введненный в memo. Сам делаю XOR'ом :

Код:
procedure TForm2.CryptDoc(longkey: string);
var key, text, result : string;
i,l : integer;
toto, c : char;
begin
key:='hastalavista';
text:=Memo1.Text;
l:=length(text);

for i := 0 to (l div 3) do
longkey := longkey + key;

for i := 1 to l do
 begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); 
result := result + toto;
 end;

Memo2.Text:=result;
end;
шифруется, пробую разшифровать так:

Код:
procedure TForm2.deCryptDoc(longkey: string);
var key, text, result : string;
i,l : integer;
toto, c : char;
begin
key:='hastalavista';
text:=Memo2.Text;
l:=length(text);

for i := 0 to (l div 3) do
longkey := longkey + key;

for i := 1 to l do
 begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); 
result := result + toto;
 end;

Memo1.Text:=result;
end;
и тут, текст выходит неправильный, точнее правильный, но до определенного места, и дешифровка останавливается При разных текстах бывает в разных местах, бывает когда вообще полностью расшифровывается

Так вот, я так понимаю что проблема в том, что как-то неправильно передаются символы переноса строки на xor функцию. что скажете, господа, можно ли исправить?

Последний раз редактировалось T-dayne; 01.07.2010 в 17:27.
T-dayne вне форума Ответить с цитированием
Старый 02.07.2010, 09:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Видимо тебе при шифровании попадается символ, которы Мемо расценивает как конец строки, или в общем управляющий символ.
Потому для отображения и хранения шифровок Мемо подходит оч. плохо.
Вот если ты будешь шифровать в строку, и из не расшифровывать тогда все будет Олл Райт.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2010, 10:03   #3
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Stilet а как в строку то? максимальная длина строк=255символов, а если у меня документ больше?
T-dayne вне форума Ответить с цитированием
Старый 02.07.2010, 10:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
максимальная длина строк=255символов
Это в паскале такое было.
В Делфи String по умолчанию может заглотнуть около 2Гб
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2010, 11:21   #5
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

о, спасибо за информацию.
Значит решил попробовать построчно шифровать/записывать:

Код:
procedure TForm2.CryptDoc(longkey, text: string);
var key, result : string;
i,l : integer;
toto, c : char;
begin
key:='1245';
l:=length(text);

for i := 0 to (l div 3) do
longkey := longkey + key;

for i := 1 to l do
 begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); // шифруем
result := result + toto;
end;

Memo2.Lines.Add(result);


end;
в процедуру в цикле передается каждая новая строка

при разшифровке, получаются ошибки, т.е. текст расшифровывается неверно, примерно 5% текста убивается.

Последний раз редактировалось T-dayne; 02.07.2010 в 11:23.
T-dayne вне форума Ответить с цитированием
Старый 02.07.2010, 11:41   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

зашифрованный текст переводите в ПЕЧАТНЫЙ вид (используйте, например, банальный base64
и всё будет хорошо.

p.s. Если сами не разберётесь - пишите, будет у меня свободное время - кину примерчик!

Последний раз редактировалось Serge_Bliznykov; 02.07.2010 в 11:43.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2010, 11:41   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for i := 1 to l do
begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); // шифруем
result := result + toto;
end;

Memo2.Lines.Add(result);
И опять ты то что зашифровал (где могут быть неперевариваемые Мемой символы) пихаешь в Мемо...
Я ж тее говорю - не пихай в Мемо строку, если не уверен что там на 100% печатные символы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2010, 11:53   #8
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Я пихаю его во 2й мемо чтобы провести savetofile() из него. А если обойтись без мемо, просто зашифрованную строку записать в файл через writeln() поможет?

фух, пробую еще один способ:
Код:
procedure TForm2.CryptDoc(longkey: string);
var key, text, result : string;
i,l : integer;
toto, c : char;
myFile : TextFile;
begin
 AssignFile(myFile, sedit1.Text);
 ReWrite(myFile);
key:='hastalavista';
text:=main2.Form1.sMemo1.Text;
l:=length(text);
progress.Form4.sProgressBar1.Max:=l;
progress.Form4.sProgressBar1.Position:=0;

for i := 0 to (l div 3) do
longkey := longkey + key;

for i := 1 to l do
 begin
toto := chr((ord(text[i]) XOR ord(longkey[i])));
result := result + toto;
 end;
writeln(myfile, result);
closefile(myfile);

end;
разшифровка :

Код:
procedure TForm3.deCryptDoc(longkey: string);
var key, text, result : string;
i,l : integer;
toto, c : char;
myfile: textfile;
begin
key:='hastalavista';
  AssignFile(myFile, sedit1.Text);
  Reset(myFile);
  Read(myFile, text);

l:=length(text);

for i := 0 to (l div 3) do
longkey := longkey + key;

for i := 1 to l do
 begin
toto := chr((ord(text[i]) XOR ord(longkey[i])));
result := result + toto;
 end;

main2.Form1.sMemo1.Text:=result;
end;
строку
Цитата:
привет
вроде разшифровывает, а вот многострочный документ - проблема, получается одно большая кракозябра(
Видимо, я неправильно использую read, при разшифровке чтобы прочитать весь файл в одну строку?

Последний раз редактировалось Stilet; 02.07.2010 в 13:47.
T-dayne вне форума Ответить с цитированием
Старый 02.07.2010, 13:45   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
записать в файл через writeln() поможет?
Ой, да ты что... Есть куча способов записать строку в файл.
Например банальным BlockWrite.
Или
Код:
 st.text:=s;
 st.SaveToFile('файл');
где st - объект класса TStringList
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2010, 17:10   #10
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Цитата:
st.text:=s;
st.SaveToFile('файл');
почему-то криво работает, расшифровывается с ошибками(

Stilet Можешь помочь доработать мой код, любым способом, главном чтоб шуршал
По идее нужен способ записать в файл/считать из файла в одну переменную.
T-dayne вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кривое отображение. Вроде ясно, а исправить незнаю 3OH! HTML и CSS 3 02.07.2010 10:23
Перевод из Memo по английскому в Memo по русскому Sanek777 Общие вопросы Delphi 5 26.09.2008 00:17
Кривое Сохранение в MySQL MegaLord PHP 1 05.01.2008 19:11
В Memo сделать так, чтобы текст был разного цвета, разноцветный memo Artem Компоненты Delphi 3 07.09.2007 13:40
В Memo ввёл раз!!! в Memo ввёл два!!! а где Memo ввёл раз??? Хs-You Компоненты Delphi 6 19.08.2007 19:48