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

Кодирование русского текста методом сдвига

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

Кодирование русского текста методом сдвига


Автор: ___Nikolay
WEB-сайт: http://delphiworld.narod.ru

unit uMain;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    mmText: TMemo;
    Label1: TLabel;
    seN: TSpinEdit;
    Label2: TLabel;
    btEncode: TButton;
    btDecode: TButton;
    procedure btEncodeClick(Sender: TObject);
  private
    { Private declarations }
    procedure Encode(bCode: boolean; n: integer); // Encode - ПРОЦЕДУРА
                                                  // bCode  - зашифровать/расшифровать
                                                  // n      - шаг смещения
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// ПРОЦЕДУРА КОДИРОВАНИЯ
procedure TForm1.Encode(bCode: boolean; n: integer);
const
  sMsgRangeErr = 'Значение шага должно быть от %d до %d!';

  // Крайние символы для кодирования
  chBigFirstLetter: char = 'А';
  chBigLastLetter: char = 'Я';

  chFirstLetter: char = 'а';
  chLastLetter: char = 'я';
var
  iMinOrd: integer; // Код символа с наименьшим кодом
  iMaxOrd: integer; // Код символа с наибольшим кодом
  i: integer; // Для фикла
  iTempOrd: integer; // Код подставляемого символа
  ch: char; // Каждый символ текста
  s: string; // Преобразуемый текст
begin
  // Проверка шага на диапазон допустимых значений
  if (n > Ord(chBigLastLetter) - Ord(chBigFirstLetter)) or (n < 1) then
  begin
    MessageDlg(Format(sMsgRangeErr, [1, Ord(chBigLastLetter) - Ord(chBigFirstLetter)]), mtError, [mbOk], 0);
    Exit;
  end;

  s := Trim(mmText.Text);
  if s <> '' then // Если есть текст
    for i := 1 to Length(s) do // Проходит каждый символ
    begin
      ch := s[i];

      // Если очередной символ нужно кодировать
      if ch in [chBigFirstLetter .. chBigLastLetter] then // Заглавные буквы
      begin
        iMinOrd := Ord(chBigFirstLetter);
        iMaxOrd := Ord(chBigLastLetter);
      end
      else
      if ch in [chFirstLetter .. chLastLetter] then // Строчные буквы
      begin
        iMinOrd := Ord(chFirstLetter);
        iMaxOrd := Ord(chLastLetter);
      end
      else // Символ кодировать не нужно
        continue;

      if bCode then // Закодировать
      begin
        iTempOrd := Ord(ch) + n; // Получаем потенциальную позицию
        if iMaxOrd - iTempOrd < 0 then // Если символ зашел за границу предельного
          ch := Chr(iMinOrd + abs(iMaxOrd - iTempOrd) - 1) // Возьмем символ с другого конца круга
        else // Если нет..
          ch := chr(iTempOrd); //..все нормально
      end
      else // Раскодировать
      begin
        iTempOrd := Ord(ch) - n; // Получаем потенциальную позицию
        if iMinOrd - iTempOrd > 0 then // Если символ зашел за границу предельного
          ch := Chr(iMaxOrd - (iMinOrd - iTempOrd - 1)) // Возьмем символ с другого конца круга
        else // Если нет..
          ch := chr(iTempOrd); //..все нормально
      end;

      s[i] := ch;
    end;
  mmText.Text := s;
end;

procedure TForm1.btEncodeClick(Sender: TObject);
begin
  Encode(boolean((Sender as TButton).Tag), seN.Value);
end;

end.
Скачать весь проект

Программа на языке Delphi реализует простой шифр Цезаря, который является типом замены шифра, где каждый символ в тексте, который нужно зашифровать или расшифровать, смещается на определенное количество мест вниз алфавита. Программа позволяет пользователю зашифровывать или расшифровывать текст, смещая его символы.

Программа состоит из основной формы с несколькими компонентами:

  • Panel1: панель, содержащая другие контролы
  • mmText: поле для ввода текста, который нужно зашифровать или расшифровать
  • Label1 и Label2: метки, отображающие информацию о процессе шифрования
  • seN: спин-редактор, позволяющий пользователю установить значение смещения
  • btEncode и btDecode: кнопки, запускающие процесс шифрования или расшифровки соответственно

Программа использует два процедура: Encode и btEncodeClick. Процедура Encode отвечает за выполнение фактического процесса шифрования или расшифровки текста. Она принимает два параметра: bCode, который указывает, нужно ли зашифровать или расшифровать текст (истина для шифрования, ложь для расшифровки), и n, которое является значением смещения.

Программа сначала проверяет, находится ли значение смещения в допустимом диапазоне (от 1 до 25). Если не, она отображает сообщение об ошибке. Затем она перебирает каждый символ в тексте ввода. Для каждого символа она проверяет, является ли он заглавной или строчной буквой и корректирует смещение соответственно.

Если bCode истинно, программа добавляет значение смещения к коду ASCII символа. Если полученный символ выходит за пределы диапазона (т.е., находится за буквами 'Z' или 'z'), она обертывает его вокруг начала алфавита, уменьшая максимально возможное значение от результата. Это обеспечивает reversibility процесса шифрования.

Если bCode ложно, программа вычитывает значение смещения из кода ASCII символа. Опять же, если полученный символ выходит за пределы диапазона, она обертывает его вокруг начала алфавита.

Наконец, программа обновляет текст в поле ввода с зашифрованным или расшифрованным текстом.

Процедура btEncodeClick вызывается при клике пользователем кнопки "Шифровать". Она вызывает процедуру Encode с значением смещения, установленным спин-редактором, и флагом шифрования или расшифровки соответственно (истина для шифрования, ложь для расшифровки).

В целом, это программа простого реализации шифра Цезаря на языке Delphi.

Кодирование русского текста методом сдвига - статья рассказывает о кодировании текста русского языка методом сдвига, реализованном в программе на языке 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:21:35/0.0057530403137207/1