Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Кодирование файлов

Delphi , Синтаксис , Шифрование

Кодирование файлов



unit EncodStr;

interface

uses
  Classes;

type
  TEncodedStream = class (TFileStream)
  private
    FKey: Char;
  public
    constructor Create(const FileName: string; Mode: Word);
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    property Key: Char read FKey write FKey default 'A';
  end;

implementation

constructor TEncodedStream.Create(
  const FileName: string; Mode: Word);
begin
  inherited 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 buffer
    for I := 0 to Count - 1 do
    begin
      // 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 := inherited Write (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 := inherited Read (pEnc^, Count);
    // use the output buffer as a string
    pBuf := PChar (@Buffer);
    // for every character actually read
    for I := 0 to CountRead - 1 do
    begin
      // 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.


unit EncForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TFormEncode = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Panel1: TPanel;
    BtnLoadPlain: TButton;
    BtnSaveEncoded: TButton;
    BtnLoadEncoded: TButton;
    Splitter1: TSplitter;
    procedure BtnSaveEncodedClick(Sender: TObject);
    procedure BtnLoadEncodedClick(Sender: TObject);
    procedure BtnLoadPlainClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormEncode: TFormEncode;

implementation

{$R *.DFM}

uses
  EncodStr;

procedure TFormEncode.BtnSaveEncodedClick(Sender: TObject);
var
  EncStr: TEncodedStream;
begin
  if SaveDialog1.Execute then
  begin
    EncStr := TEncodedStream.Create(
      SaveDialog1.Filename, fmCreate);
    try
      Memo1.Lines.SaveToStream (EncStr);
    finally
      EncStr.Free;
    end;
  end;
end;

procedure TFormEncode.BtnLoadEncodedClick(Sender: TObject);
var
  EncStr: TEncodedStream;
begin
  if OpenDialog1.Execute then
  begin
    EncStr := TEncodedStream.Create(
      OpenDialog1.FileName, fmOpenRead);
    try
      Memo2.Lines.LoadFromStream (EncStr);
    finally
      EncStr.Free;
    end;
  end;
end;

procedure TFormEncode.BtnLoadPlainClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Memo1.Lines.LoadFromFile (
      OpenDialog1.FileName);
end;

end.

Загрузить весь проект

Программа на Delphi, демонстрирующая простой файловый кодировщик и декодировщик с помощью класса TEncodedStream. Проект состоит из двух модулей: EncodStr.pas и EncForm.pas.

TEncodedStream Класс TEncodedStream наследуется от TFileStream и добавляет два метода: Write и Read. Эти методы используются для кодирования и декодирования файла. Кодирование происходит следующим образом:

  1. Выделяется память для буфера, содержащего зашифрованные данные.
  2. Используется входной буфер как массив символов.
  3. Для каждого символа в входном буфере добавляется значение ключа (инициализированное значением 'A') к коду символа с помощью функции Ord. Это производит новый код символа.
  4. Записывается зашифрованный символ в буфер, содержащий зашифрованные данные.
  5. Буфер, содержащий зашифрованные данные, записывается в файл.

Декодирование происходит аналогично, но оно вычитывает значение ключа из каждого зашифрованного символа кода перед хранением его в буфере вывода.

EncForm Класс TFormEncode - это форма Delphi, предоставляющая пользовательский интерфейс для кодирования и декодирования файлов. Форма имеет три кнопки:

  1. BtnLoadPlain: Загружает текстовый файл в контрол Memo1.
  2. BtnSaveEncoded: Сохраняет содержимое Memo1 в зашифрованный файл с помощью класса TEncodedStream.
  3. BtnLoadEncoded: Загружает зашифрованный файл в контрол Memo2 и декодирует его с помощью класса TEncodedStream.

Форма также имеет два мемо-контрола (Memo1 и Memo2) и два диалоговых окна (OpenDialog1 и SaveDialog1) для выбора файлов для загрузки или сохранения.

Использование Чтобы использовать этот проект, выполните следующие шаги:

  1. Запустите проект.
  2. Нажмите кнопку BtnLoadPlain, чтобы загрузить текстовый файл в Memo1.
  3. Нажмите кнопку BtnSaveEncoded, чтобы сохранить содержимое Memo1 в зашифрованный файл.
  4. Нажмите кнопку BtnLoadEncoded, чтобы загрузить зашифрованный файл в Memo2 и декодировать его.

Обратите внимание, что это простой пример, и вы можете добавить более функциональные возможности к вашему кодировщику и декодирущику, например, обработку ошибок или поддержку нескольких значений ключа.

Кодирование файлов - это процесс изменения кода файла для его защиты от несанкционированного доступа, а также для уменьшения размера файла. В статье рассматривается реализация алгоритма кодирования файлов с помощью Delphi


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:20:34/0.0057780742645264/1