Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Cтроки и Файлы   Найти похожие ветки 

 
gamez   (2008-04-22 17:44) [0]

Необходимо зашифровать файл
Пишет такую ошибку

Debugger Exception Notification
Project LAB.exe raised execprion class EAccessViolation with message "Access violation at address 00461BC1 in module LAB.exe".
Write of address 00000000".



 F1,F2: file of byte;
 b: byte;
 i,j: integer;
 N: integer;
 key :array of byte;

----------------------------------------

procedure TForm1.Button2Click(Sender: TObject);
begin
 memo1.Clear;
//  key := strtoint(edit2.Text);
key[0] := 1;
key[1] := 2;
key[2] := 3;
key[3] := 4;

 AssignFile(f1,edit1.text);
 Reset(f1) ;
 AssignFile(f2,edit3.text);
 rewrite(f2) ;

 While Not Eof(f1) do
 begin
   Read(f1, b);
   n := n + 1;
   if n = 3 then n := 0;
   b := b Xor key[n];
   Write(f2, b);
 end;

 CloseFile(f1);
 CloseFile(f2);

 memo1.Lines.LoadFromFile(edit3.text);
 ShowMessage("Файл успешно зашифрован");
end;


 
{RASkov} ©   (2008-04-22 17:46) [1]

> [0] gamez   (22.04.08 17:44)

Устанавливать размер нужно динамическим массивам....


 
Palladin ©   (2008-04-22 18:08) [2]


> key := strtoint(edit2.Text);

чего бы это значило...

помимо длины динмассива, переменная n инициализирована Пушкиным А.С.


 
korneley ©   (2008-04-22 18:28) [3]


> помимо длины динмассива, переменная n инициализирована Пушкиным
> А.С.

И растет постоянно, никакого key[] не хватит.


 
gamez   (2008-04-22 18:32) [4]

Как сделать динамическим массивом.
Я сделал переменную key масивом типа Byte и указал четыре из них.
Может если сделать так
key :array [0..3] of byte;
Но это не выход потому что кодов может быть и не три а больше.
А граница получается что ограничивается цифрой 3.
Как сделать подругому.
Объясните.


 
Palladin ©   (2008-04-22 18:34) [5]


> korneley ©   (22.04.08 18:28) [3]

расти она будет только до трех


> gamez   (22.04.08 18:32) [4]

а мы устанавливать длинну динамического массива не умеем? ну раз не умеем значит самое время научится, то есть посмотреть почитать в справке про динамические массивы


 
gamez   (2008-04-22 18:41) [6]

Что просто задать длину для переменной key? или что еще?
setlength(key,3);


 
Palladin ©   (2008-04-22 18:44) [7]

а что тебе еще нужно то? ну отобрать у Пушкина А.С. право инициализации значения n


 
korneley ©   (2008-04-22 18:48) [8]


> расти она будет только до трех

Ну, дык, если начальное значение меньше трех, то да ;)


 
Palladin ©   (2008-04-22 18:51) [9]


> korneley ©   (22.04.08 18:48) [8]

никаких "если", дойдет до maxint+4 и вернется в зад к нулю )


 
gamez   (2008-04-22 18:56) [10]

Уже инициализировал Я эту переменну.
Вот проблема.
Значит нужно:
1) Записать слово в компоненте TEdit2
2) В цикле до конца этого слова к переменой key[i]
нужно присвоить порядковый номер каждой буквы слова.

Получается не разбериха в типах с TEdit2 нельзя записать в тип char
а потом и порядковый номер как записать в переменую key[i]



 N,C: integer;
 buf: string;
_____________________________________________

procedure TForm1.Button2Click(Sender: TObject);
begin
 memo1.Clear;
 n:=0;
 buf := edit2.Text;
 C:= length(buf);
 setlength(key,C);
 for I := 0 to C do
 key[i] := buf[i];

 AssignFile(f1,edit1.text);
 Reset(f1) ;
 AssignFile(f2,edit3.text);
 rewrite(f2) ;

 While Not Eof(f1) do
 begin
   Read(f1, b);
   n := n + 1;
   if n = C then n := 0;
   b := b Xor key[n];
   Write(f2, b);
 end;

 CloseFile(f1);
 CloseFile(f2);

 memo1.Lines.LoadFromFile(edit3.text);
 ShowMessage("Файл успешно зашифрован");
end;


 
Palladin ©   (2008-04-22 18:59) [11]

1. читаем в справке как индексируются символы в строке
2. временная строка buf не нужна, Edit.Text и без buf является string


 
Palladin ©   (2008-04-22 19:00) [12]

а, ну и прикинь действительно символ не совместим с integer, вот так все ужасно, тебе наверное нужно как то будет превратить символ в число


 
gamez   (2008-04-22 19:01) [13]

Как работать в этом месте
.....
key[i] := buf[i];
....
Без это переменной.
Разве можно в Edit индексировать строку.


 
Palladin ©   (2008-04-22 19:02) [14]


> Разве можно в Edit индексировать строку.

а кто говорил про Edit. ты разве к Edit обращаешься?


 
gamez   (2008-04-22 19:03) [15]

Palladin ©   (22.04.08 19:00) [12]
То есть тип Char превратить Byte ..


 
Palladin ©   (2008-04-22 19:05) [16]


> gamez   (22.04.08 19:03) [15]

ага... с помощью таких волшебных вещей как приведение типа... достаточно знать что символы "0".."9" в ASCII распологаются последовательно и что

byte("0")=48, а
byte("9")=57


 
Palladin ©   (2008-04-22 19:06) [17]

даже и значения не важны... главное что они последовательно располагаются...


 
gamez   (2008-04-22 19:14) [18]

что то есть но рашифровать не получется.


// шифрование
procedure TForm1.Button2Click(Sender: TObject);
begin
 memo1.Clear;
 n:=0;
 buf := edit2.Text;
 C:= length(buf);
 setlength(key,C);
 for I := 0 to C do
 key[i] := byte(buf[i]);

 AssignFile(f1,edit1.text);
 Reset(f1) ;
 AssignFile(f2,edit3.text);
 rewrite(f2) ;

 While Not Eof(f1) do
 begin
   Read(f1, b);
   n := n + 1;
   if n = C then n := 0;
   b := b Xor key[n];
   Write(f2, b);
 end;

 CloseFile(f1);
 CloseFile(f2);

 memo1.Lines.LoadFromFile(edit3.text);
 ShowMessage("Файл успешно зашифрован");
end;

// Разшифрование
procedure TForm1.Button3Click(Sender: TObject);
begin
 memo2.Clear;
 n:=0;
 buf := edit6.Text;
 C:= length(buf);
 setlength(key,C);
 for I := 0 to C do
 key[i] := byte(buf[i]);

 AssignFile(f1,edit4.text);
 Reset(f1) ;
 AssignFile(f2,edit5.text);
 rewrite(f2) ;

 While Not Eof(f1) do
 begin
   Read(f1, b);
   n := n + 1;
   if n = C then n := 0;
   b := b Xor key[n];
   Write(f2, b);
 end;

 CloseFile(f1);
 CloseFile(f2);

 memo2.Lines.LoadFromFile(edit3.text);
 ShowMessage("Файл успешно зашифрован");
end;



 
Palladin ©   (2008-04-22 19:20) [19]


> gamez   (22.04.08 19:14) [18]

1 строки индексируются с 1 (один)
2 я спрашиваю, зачем тебе buf?


 
gamez   (2008-04-22 19:28) [20]

Вот испаравил. Работает только почемуто проблема возникает если шифр из одной буквы состоит. Тогда не правильно шифруется и дешифруется.Почему?

procedure TForm1.Button2Click(Sender: TObject);
begin
 memo1.Clear;
 n:=0;
 C:= length(edit2.Text);
 setlength(key,C);
 for I := 0 to C do
 key[i] := byte(edit2.Text[i]);

 AssignFile(f1,edit1.text);
 Reset(f1) ;
 AssignFile(f2,edit3.text);
 rewrite(f2) ;

 While Not Eof(f1) do
 begin
   Read(f1, b);
   n := n + 1;
   if n = C then n := 1;
   b := b Xor key[n];
   Write(f2, b);
 end;

 CloseFile(f1);
 CloseFile(f2);

 memo1.Lines.LoadFromFile(edit3.text);
 ShowMessage("Файл успешно зашифрован");
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 memo2.Clear;
 n:=0;
 C:= length(edit6.Text);
 setlength(key,C);
 for I := 0 to C do
 key[i] := byte(edit6.Text[i]);

 AssignFile(f1,edit4.text);
 Reset(f1) ;
 AssignFile(f2,edit5.text);
 rewrite(f2) ;

 While Not Eof(f1) do
 begin
   Read(f1, b);
   n := n + 1;
   if n = C then n := 1;
   b := b Xor key[n];
   Write(f2, b);
 end;

 CloseFile(f1);
 CloseFile(f2);

 memo2.Lines.LoadFromFile(edit5.text);
 ShowMessage("Файл успешно зашифрован");
end;



 
Palladin ©   (2008-04-22 19:29) [21]

я тебе реально задрался говорить, что строки индексируются с ЕДИНИЦЫ.. и только то, что это конференция для начинающих, не дает мне тебя прямо назвать тупым животным! (С) BOR



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

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

Наверх




Память: 0.5 MB
Время: 0.034 c
15-1207050353
snake-as
2008-04-01 15:45
2008.05.18
Графический редактор


6-1186665472
r.o.o.t
2007-08-09 17:17
2008.05.18
Как правельно обрабоать обрыв свзяи в TServerSocket


2-1208432755
Oyeme
2008-04-17 15:45
2008.05.18
Поиск по множеству из мемо


2-1208615940
ply
2008-04-19 18:39
2008.05.18
как запретить изменение размера окна?


15-1207417988
No_Dead
2008-04-05 21:53
2008.05.18
Мне страшно%> комп живет своей жизнью





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский