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

Вниз

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

 
ArMellon ©   (2005-08-24 03:49) [0]

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


 
Defunct ©   (2005-08-24 03:58) [1]

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

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


 
ArMellon ©   (2005-08-24 04:37) [2]

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


 
Джо ©   (2005-08-24 04:42) [3]


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

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


 
ArMellon ©   (2005-08-24 04:55) [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`ом ?


 
Defunct ©   (2005-08-24 05:04) [5]

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

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 );

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


 
Джо ©   (2005-08-24 05:07) [6]

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

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

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

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


 
Джо ©   (2005-08-24 05:09) [7]


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

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



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

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
14-1125089143
Dr.Nemo
2005-08-27 00:45
2005.09.18
Помогите зделать простой таймер


3-1123051769
worldmen
2005-08-03 10:49
2005.09.18
Создание базы в FireBird.


9-1116573150
LEGIONER75
2005-05-20 11:12
2005.09.18
организации базиса системы в сцене


2-1123700068
Vir
2005-08-10 22:54
2005.09.18
Hint


4-1121708619
DenisWW
2005-07-18 21:43
2005.09.18
как добавить в контекстное меню рабочего стола(desktop) свой пунк