![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как реализовать шифрование типизированных файлов
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]> как реализовать шифрование типизированных файлов
Также как и нетипизированных: шифровать перед записью, расшифровывать при считывании.