Главная страница
    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.057 c
2-1208504247
sql
2008-04-18 11:37
2008.05.18
MS SQL 2000


2-1208344255
lewka-serdceed
2008-04-16 15:10
2008.05.18
Ошибка "Invalid variant operation"


8-1179992364
namco
2007-05-24 11:39
2008.05.18
Video in Delphi


15-1207050353
snake-as
2008-04-01 15:45
2008.05.18
Графический редактор


2-1208926830
net send
2008-04-23 09:00
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский