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