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

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

Шифрование [D6, WinXP]


MMMx ©   (2005-02-06 21:39:00) 

Как сделать так чтобы во время неработы программы файл (10-100 МБ) был в зашифрованном виде (от шифрования требуется только чтобы рядовой пользователь не смог его открыть с помощью программы просмоторщика), а когда программа запускается, то расшифровывался.


Slym   (2005-02-07 05:25:00) [1]

А зачем все сразу расшифровывать?
Если используются потоки (TStream) лучше написать CryptoStreamAdapter (примочка к стреаму) в нем и расшифровывать.
Преимущества:
1. Файл всегда зашифрован.
2. Нетребуется долгая процедура расшифровки всего файла.
3. Шифровка/дешифровка по запросу (Read/Write)

Пример (псевдокод)

CryptoStreamAdapter =class(stream)
FStream:TStream;
function Read(...);override;
function Write(...);override;

constructor Create(Stream:TStream);oveeride;

Create;
begin
FStream:=Stream;
end;

function Read(Buf);override;
begin
inherited (Buf)
Decrypt(Buf);
end;

function Write(Buf);override;
begin
inherited (Buf)
Encrypt(Buf);
end;


ordik   (2005-02-07 03:30:00) [2]

Defunct ©   (07.02.05 03:25) [10]
Вот я к тому и приступил :)

MMMx   (06.02.05 21:39)
На всякий случай :)
var
cryptmask: string='любые символы'


Defunct   (2005-02-07 03:25:00) [3]

ordik ©   (07.02.05 03:13) [9]

ну дык, пора уже его апгрейдить :)


ordik   (2005-02-07 03:13:00) [4]

> Defunct ©   (07.02.05 03:03) [8]
Код с незапамятных времен лежал в готовом виде :)


Defunct   (2005-02-07 03:03:00) [5]

ordik ©   (07.02.05 02:46) [6]

это типа конкурс кто медленнее зашифрует?
Зачем читать-то по одному байту?


ordik   (2005-02-07 02:49:00) [6]

Файл может быть любой.


ordik   (2005-02-07 02:46:00) [7]

var
i,j: integer;s:char;
begin
j:=0;
i:=1;
s:=' ';
lala:='A:\'+oo+'.txt';
begin
AssignFile(a,lala);
{$I-}
Reset(a,1);

while not eof(a) do
begin
blockread(a,s,1);
if i>length(cryptmask) then i:=1;
s:=char(ord(s) xor ord(cryptmask[i]));
seek(a,j);
i:=i+1;
j:=j+1;
Blockwrite(a,s,1);
end;
CloseFile(a);
{$I+}
end;
end;


Defunct   (2005-02-07 02:37:00) [8]

MMMx   (06.02.05 22:34) [2]

и шифрование и расшифрование:

A[i] := A[i] XOR$FF;


Anatoly Podgoretsky   (2005-02-06 22:43:00) [9]

Элементарный код шифрования выгдядит например так A[i] := A[i] + 1


begin...end   (2005-02-06 22:41:00) [10]

> [2] MMMx   (06.02.05 22:34)

Самый простой метод "шифрования" - простая замена символов в тексте. Например, на следующий в алфавите: "а" в исходном тексте заменяется на "б", и т.д. При расшифровке всё происходит в обратном порядке. Но такое шифрование защитит, наверное, только от детей :-)

Немного сложнее алгоритм шифрования с помощью логической операции xor. Там ещё понадобится где-то хранить ключ. Сделайте поиск в Яндексе по словам "шифрование xor". В Сети достаточно как примеров готового кода, так и теории этого метода.


MMMx   (2005-02-06 22:34:00) [11]

Я это и хочу. Вот только я ни чего не понимаю в криптографии. Мне надо самый элементарный код шифрования, времени на изучение криптографии нет – нужно сдавать проект. Если не сложно дайте самый простой алгоритм шифрования файла или подскажите где найти.


Vit@ly   (2005-02-06 21:47:00) [12]

А в чем собственно проблема?
Зашифруй это файл раз и навсегда, любым понравившимся способом. А при обращении (чтении) к нему из программы, расшифровывай тем же способом


Наверх

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