Главная страница
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.037 c
4-1122463628
Dust
2005-07-27 15:27
2005.09.18
Глобальный системный флаг


14-1124179338
Александр Иванов
2005-08-16 12:02
2005.09.18
Теорема Ферма доказана?


14-1124791702
ClubCoder
2005-08-23 14:08
2005.09.18
У кого есть свободное время?


14-1124890654
TStas
2005-08-24 17:37
2005.09.18
За сколько времени на самом деле включают Стрим?


14-1124905300
Веретенников
2005-08-24 21:41
2005.09.18
Выбор ТВ-тюнера