![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Cтроки и Файлы [D7, XP]
gamez © (2008-04-22 17:44:00)Необходимо зашифровать файл
Пишет такую ошибку
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;
Palladin (2008-04-22 19:29:00) [1]я тебе реально задрался говорить, что строки индексируются с ЕДИНИЦЫ.. и только то, что это конференция для начинающих, не дает мне тебя прямо назвать тупым животным! (С) BOR
gamez (2008-04-22 19:28:00) [2]Вот испаравил. Работает только почемуто проблема возникает если шифр из одной буквы состоит. Тогда не правильно шифруется и дешифруется.Почему?
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:20:00) [3]
> gamez (22.04.08 19:14) [18]
1 строки индексируются с 1 ( один)
2 я спрашиваю, зачем тебе buf?
gamez (2008-04-22 19:14:00) [4]что то есть но рашифровать не получется.
// шифрование
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:06:00) [5]даже и значения не важны... главное что они последовательно располагаются...
Palladin (2008-04-22 19:05:00) [6]
> gamez (22.04.08 19:03) [15]
ага... с помощью таких волшебных вещей как приведение типа... достаточно знать что символы '0'..'9' в ASCII распологаются последовательно и что
byte('0')=48, а
byte('9')=57
gamez (2008-04-22 19:03:00) [7]Palladin © (22.04.08 19:00) [12]
То есть тип Char превратить Byte ..
Palladin (2008-04-22 19:02:00) [8]
> Разве можно в Edit индексировать строку.
а кто говорил про Edit. ты разве к Edit обращаешься?
gamez (2008-04-22 19:01:00) [9]Как работать в этом месте
.....
key[i] := buf[i];
....
Без это переменной.
Разве можно в Edit индексировать строку.
Palladin (2008-04-22 19:00:00) [10]а, ну и прикинь действительно символ не совместим с integer, вот так все ужасно, тебе наверное нужно как то будет превратить символ в число
Palladin (2008-04-22 18:59:00) [11]1. читаем в справке как индексируются символы в строке
2. временная строка buf не нужна, Edit.Text и без buf является string
gamez (2008-04-22 18:56:00) [12]Уже инициализировал Я эту переменну.
Вот проблема.
Значит нужно:
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:51:00) [13]
> korneley © (22.04.08 18:48) [8]
никаких "если", дойдет до maxint+4 и вернется в зад к нулю )
korneley (2008-04-22 18:48:00) [14]
> расти она будет только до трех
Ну, дык, если начальное значение меньше трех, то да ;)
Palladin (2008-04-22 18:44:00) [15]а что тебе еще нужно то? ну отобрать у Пушкина А.С. право инициализации значения n
gamez (2008-04-22 18:41:00) [16]Что просто задать длину для переменной key? или что еще?
setlength(key,3);
Palladin (2008-04-22 18:34:00) [17]
> korneley © (22.04.08 18:28) [3]
расти она будет только до трех
> gamez (22.04.08 18:32) [4]
а мы устанавливать длинну динамического массива не умеем? ну раз не умеем значит самое время научится, то есть посмотреть почитать в справке про динамические массивы
gamez (2008-04-22 18:32:00) [18]Как сделать динамическим массивом.
Я сделал переменную key масивом типа Byte и указал четыре из них.
Может если сделать так
key :array [0..3] of byte;
Но это не выход потому что кодов может быть и не три а больше.
А граница получается что ограничивается цифрой 3.
Как сделать подругому.
Объясните.
korneley (2008-04-22 18:28:00) [19]
> помимо длины динмассива, переменная n инициализирована Пушкиным
> А.С.
И растет постоянно, никакого key[] не хватит.
Palladin (2008-04-22 18:08:00) [20]
> key := strtoint(edit2.Text);
чего бы это значило...
помимо длины динмассива, переменная n инициализирована Пушкиным А.С.