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

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

Защита файла при помощи записи.


йцйцуун ©   (2004-11-19 11:37:00) 

Подскажите, как записать текстовой файл так, чтобы он был нечитаемым из других программ, то есть пользователь открыв его в другой программе увидел бы какую-нибудь абракадабру которую было бы совершенно невозможно прочитать. Запись при помощи TFileStream- делает текст нечитаемыми только когда записывается большой объем текста, а способов сохраниния текста кроме обычного SaveToFile и TFileStream TWriter я не знаю.
Помогите пожалуйста.


Юрий К   (2004-11-20 14:30:00) [1]

"procedure Shivrovka2(var str:string; c:integer);
begin
for i:=1 to Length(str) do
 str[i+1]:=Chr(Ord(str[i+1])+c);
end;"

Только это делать сразу для четырёх (восьми) байтов вместо одного:

pdw: PDWORD;

pdw := PDWORD(@s[1]);

for i ... do
pdw[i] = pdw[i] + c;


человек   (2004-11-20 14:10:00) [2]

упс.. str[i], а не str[i+1].
по-моему, это самый быстрый способ шифровки (из тех, что посимвольно шифруют).


человек   (2004-11-20 14:08:00) [3]

Fay ©
"2 ***SPIDER*** ©   (19.11.04 14:03) [6]
Это на конкурс "Самый медленный код"? Приз зрительских симпатий Вам обеспечен 8)"
Нормальное кодирование по Цезарю. Разве что у него в качестве ключа используется символ с кодом 256, а это можно параметризовать:

procedure Shivrovka2(var str:string; c:integer);
begin
for i:=1 to Length(str) do
  str[i+1]:=Chr(Ord(str[i+1])+c);
end;


Ключ c - подается в виде параметра.
Если файлы не гигантские - быстро всё зашифруется. Расшифровать такой код несложно (достаточно перебрать ключи), но целям получения "абракадабры" послужит отлично. Насколько я понял, речь идет не о сертификации ПО на безопасность, а просто о защите от "дурака". Зачем юзверям знать логику работы вашей программы (если она что-то хранит в Temp файлах)?


dimaxx   (2004-11-20 13:05:00) [4]

Зачем? Просто его надо открыть так:

var H: Thandle;

H:=FileOpen(Filename,fmOpenReadWrite or fmShareExclusive);

Параметр fmShareExclusive показывает, что к файлу не имеет доступ никто, кроме приложения, открывшего/создавшего файл.

Если нужно создать файл, а не открыть имеющийся, то добавить fmCreate.


Юрий Зотов   (2004-11-20 00:23:00) [5]

> йцйцуун   (20.11.04 00:05) [9]

>> Лучче сделай так, чтобы никто не смог его открыть (кроме
>> тебя) - лучший способ сокрытия данных.

> И как это?

Например, можно написать CloseFile два раза подряд. Тогда никто не догадается, что он был закрыт дважды, и что OpenFile надо поэтому тоже писать дважды.


йцйцуун   (2004-11-20 00:05:00) [6]

dimaxx ©   (19.11.04 22:54) [8]

И как это?


dimaxx   (2004-11-19 22:54:00) [7]

Лучче сделай так, чтобы никто не смог его открыть (кроме тебя) - лучший способ сокрытия данных.


Fay   (2004-11-19 14:05:00) [8]

2 ***SPIDER*** ©   (19.11.04 14:03) [6]
Это на конкурс "Самый медленный код"? Приз зрительских симпатий Вам обеспечен 8)


***SPIDER***   (2004-11-19 14:03:00) [9]

Шифруй каждую строку простым способом:

function Shivrovka(str:string):string;
var i:integer;
   s:string;
   c:char;
begin
 s:='';
 if Length(str)>0 then
 for i:=1 to Length(str) do
 begin
   c:=str[i];
   s:=s+Chr(256-Ord(c));
 end;
 result:=s;
end;
...


Эта функция служит так же для дешифровки.


йцйцуун   (2004-11-19 11:56:00) [10]

Алхимик ©   (19.11.04 11:48) [4]

логично.


Amoeba   (2004-11-19 11:48:00) [11]

Скачай бибилиотеку QStrings. Там помимо массы полезных ф-й для работы со строками есть и ф-ии шифрования.
http://swiss.torry.net/vcl/vcltools/text/adqstrings.zip


Алхимик   (2004-11-19 11:48:00) [12]


> [2] йцйцуун   (19.11.04 11:41)
> Smithson
>
> как?

С помощью шифрования.


йцйцуун   (2004-11-19 11:41:00) [13]

Smithson

как?


Smithson   (2004-11-19 11:40:00) [14]

Зашифровать его перед записью


Наверх

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