Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
2-1208842288
Динис_ИС
2008-04-22 09:31
2008.05.18
Многострочный Label


15-1207479158
Ega23
2008-04-06 14:52
2008.05.18
Агоритмы шифрации с ключом


3-1197527318
abhtr
2007-12-13 09:28
2008.05.18
Как восстановить удаленные записи в таблице Firebird


15-1207358206
Tirael
2008-04-05 05:16
2008.05.18
реклама линукса


2-1208676738
Mag
2008-04-20 11:32
2008.05.18
Редактирование текстового файла. Замена части текста на другой.