unit EncodStr;
interfaceuses
Classes;
type
TEncodedStream = class (TFileStream)
private
FKey: Char;
publicconstructor Create(const FileName: string; Mode: Word);
functionRead(var Buffer; Count: Longint): Longint; override;
functionWrite(const Buffer; Count: Longint): Longint; override;
property Key: Char read FKey write FKey default 'A';
end;
implementationconstructor TEncodedStream.Create(
const FileName: string; Mode: Word);
begininherited Create (FileName, Mode);
FKey := 'A';
end;
function TEncodedStream.Write(const Buffer;
Count: Longint): Longint;
var
pBuf, pEnc: PChar;
I, EncVal: Integer;
begin// allocate memory for the encoded buffer
GetMem (pEnc, Count);
try// use the buffer as an array of characters
pBuf := PChar (@Buffer);
// for every character of the bufferfor I := 0 to Count - 1 dobegin// encode the value and store it
EncVal := ( Ord (pBuf[I]) + Ord(Key) ) mod 256;
pEnc [I] := Chr (EncVal);
end;
// write the encoded buffer to the file
Result := inheritedWrite (pEnc^, Count);
finally
FreeMem (pEnc, Count);
end;
end;
function TEncodedStream.Read(var Buffer; Count: Longint): Longint;
var
pBuf, pEnc: PChar;
I, CountRead, EncVal: Integer;
begin// allocate memory for the encoded buffer
GetMem (pEnc, Count);
try// read the encoded buffer from the file
CountRead := inheritedRead (pEnc^, Count);
// use the output buffer as a string
pBuf := PChar (@Buffer);
// for every character actually readfor I := 0 to CountRead - 1 dobegin// decode the value and store it
EncVal := ( Ord (pEnc[I]) - Ord(Key) ) mod 256;
pBuf [I] := Chr (EncVal);
end;
finally
FreeMem (pEnc, Count);
end;
// return the number of characters read
Result := CountRead;
end;
end.
Программа на Delphi, демонстрирующая простой файловый кодировщик и декодировщик с помощью класса TEncodedStream. Проект состоит из двух модулей: EncodStr.pas и EncForm.pas.
TEncodedStream
Класс TEncodedStream наследуется от TFileStream и добавляет два метода: Write и Read. Эти методы используются для кодирования и декодирования файла. Кодирование происходит следующим образом:
Выделяется память для буфера, содержащего зашифрованные данные.
Используется входной буфер как массив символов.
Для каждого символа в входном буфере добавляется значение ключа (инициализированное значением 'A') к коду символа с помощью функции Ord. Это производит новый код символа.
Записывается зашифрованный символ в буфер, содержащий зашифрованные данные.
Буфер, содержащий зашифрованные данные, записывается в файл.
Декодирование происходит аналогично, но оно вычитывает значение ключа из каждого зашифрованного символа кода перед хранением его в буфере вывода.
EncForm
Класс TFormEncode - это форма Delphi, предоставляющая пользовательский интерфейс для кодирования и декодирования файлов. Форма имеет три кнопки:
BtnLoadPlain: Загружает текстовый файл в контрол Memo1.
BtnSaveEncoded: Сохраняет содержимое Memo1 в зашифрованный файл с помощью класса TEncodedStream.
BtnLoadEncoded: Загружает зашифрованный файл в контрол Memo2 и декодирует его с помощью класса TEncodedStream.
Форма также имеет два мемо-контрола (Memo1 и Memo2) и два диалоговых окна (OpenDialog1 и SaveDialog1) для выбора файлов для загрузки или сохранения.
Использование
Чтобы использовать этот проект, выполните следующие шаги:
Запустите проект.
Нажмите кнопку BtnLoadPlain, чтобы загрузить текстовый файл в Memo1.
Нажмите кнопку BtnSaveEncoded, чтобы сохранить содержимое Memo1 в зашифрованный файл.
Нажмите кнопку BtnLoadEncoded, чтобы загрузить зашифрованный файл в Memo2 и декодировать его.
Обратите внимание, что это простой пример, и вы можете добавить более функциональные возможности к вашему кодировщику и декодирущику, например, обработку ошибок или поддержку нескольких значений ключа.
Кодирование файлов - это процесс изменения кода файла для его защиты от несанкционированного доступа, а также для уменьшения размера файла. В статье рассматривается реализация алгоритма кодирования файлов с помощью Delphi
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.