Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как реализовать шифрование типизированных файлов


ArMellon ©   (2005-08-24 03:49:00) 

едиственное что пришло в голову это сохранять раскодированный файл в в папку темп и оттуда считывать.
но не хотелось бы этого делать...чтобы юзер случаем не залез или еще что...
вобщем что можете предложить по реализации задачи?


Джо   (2005-08-24 05:09:00) [1]


>  [5] Defunct ©   (24.08.05 05:04)

Мои 2 копейки - не из конкурренции, просто опоздал ;) Думал, поленятся расписывать.


Джо   (2005-08-24 05:07:00) [2]

Ну, например, у тебя есть процедура
procedure Crypt (Data: Pointer; Size: Integer; Key: Int64);
begin
 // шифрует указанное кол-во байт начиная с адреса Data
end;

1. Crypt(@MyRecord,SizeOf(MyRecord));
2. Записываешь в файл.

Аналогично считываешь.

Если процедура шифрования изменяет размер данных (т.е, не твой ксор) - учесть динамическое выделение, реалокацию памяти.
Спать пошел.


Defunct   (2005-08-24 05:04:00) [3]

например так:

TEncodingArray = array[1..SizeOf( TMyRecord ) ];
PEncodingArray = ^TEncodingArray;

const
 EncryptionKey = $79;

procedure EncodeRecord(var Buf: TMyRecord):TMyRecord;
var
 EncPointer : PEncodingArray;
 i : Integer;
 CurrentKey : Byte;
begin
 EncPointer := @Result;
 CurrentKey := EncryptionKey;
 for i := 1 to SizeOf(TMyRecord) do
   begin
     EncPointer[i] := TEncodingArray(Buf)[i] xor CurrentKey;
     CurrentKey := CurrentKey + EncryptionKey;
   end;
end;


Rec.Value2:=10;
...
Rec := EncodeRecord( Rec );
Write(F,Rec);
CloseFile(F);
...

при чтении:

Read(F, Rec);
Rec := EncodeRecord( Rec );

код не проверял, может быть есть ошибки, а может быть и нет, расскажешь.


ArMellon   (2005-08-24 04:55:00) [4]

т.е.
Есть запись типа:
TMyRecord:=Record
  Value1:String[50];
  Value2:Integer;
  ...
end;
...
есть записть в файл:
var
F:File of TMyRecord;
Rec:TMyRecord;
begin
...
Rec.Value1:='blabla';
Rec.Value2:=10;
...
Write(F,Rec);
CloseFile(F);
...
end;
и аналогичное чтение файла
как можно это шифровать например xor`ом ?


Джо   (2005-08-24 04:42:00) [5]


>  [2] ArMellon ©   (24.08.05 04:37)

Нет. Прочитал в память. Расшифровал там же. Поработал. Если изменились - зашифровал, записал обратно.


ArMellon   (2005-08-24 04:37:00) [6]

Каким образом?
типа расшифровал файл на
диске
считал и обратно зашифровал?
можно ли как-нить это проделать в памяти а не на диске?


Defunct   (2005-08-24 03:58:00) [7]

> как реализовать шифрование типизированных файлов

Также как и нетипизированных: шифровать перед записью, расшифровывать при считывании.


Наверх

Титульная страница Поиск, карта сайта Написать письмо