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