Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
путя
0 / 0 / 0
Регистрация: 04.10.2013
Сообщений: 1
1

аппаратная реализация декодирования цк 15 11

08.10.2013, 05:45. Просмотров 296. Ответов 0
Метки нет (Все метки)

Необходимо учесть в программе, что нумерация разрядов в ЦК – справа налево

Т.е. если вводится номер искаженного разряда 14, то должен меняться второй слева разряд
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
BitBtn1: TBitBtn;
MainMenu1: TMainMenu;
BitBtn2: TBitBtn;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Panel1: TPanel;
Memo1: TMemo;
Label7: TLabel;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Label7Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
iter:Integer;

implementation

{$R *.dfm}
function COD(s:string):string; // функция шифрует переданный фрагмент
var i:Integer; // переменная для цикла
m:string; // порождающий многочлен
begin
m:='11001';
SetLength(Result,5); // прописываем длину строки
for i:=1 to 5 do Result[i]:=IntToStr((StrToInt(s[i])+StrToInt(m[i])) mod 2)[1];
// шифруем полученный бит
Result:=IntToStr(StrToInt(Result)); // получаем результат без начальных нулей
end;

function Chifr(str:string):string;
// функция кодирует исходный код
// возвращает закодированные данные
var i,l,all:Integer; // itog - контролируем количество "использованых" в кодировании символов
s,st,s1:string;
begin
all:=0;
st:=str+'0000'; // приписываем нули к информационной части кода
s1:=COD(Copy(st,1,5)); // шифровка первых 6 символов
all:=all+5;
while all<length(str)+4 do begin
s:=s1+Copy(st,all+1,5-length(s1)); // добавляем к обработанному фрагменту символы, чтобы дина составляла 5
all:=all+5-length(s1); // считаем количество "использованых" символов
if length(s) = 5 then s1:=COD(s) else s1:=s; // проверка условия завершения шифрования, по длине оставшейся части
end;
l:=length(s1); // длина полученной комбинации
for i:=1 to 4-l do s1:='0'+s1; // добавление к получившемуся коду нулей до достижения длины в 5 символов
Result:=str+s1; // получение итоговой избыточной комбинации
end;

function Raschifr(str:string):string;
// функция выполняет дешифрование кода, возвращает остаток от деления
var all,i,l:Integer; // itog - для контроля за номером текущего символа
s,st,s1:string;
begin
all:=0;
st:=str;
s1:=COD(Copy(st,1,5)); // дешифровка первых 5 символов
all:=all+5;
while all<length(str) do begin
s:=s1+Copy(st,all+1,5-length(s1)); // добавление к обработанному фрагменту символы, чтобы длина составляла 5
all:=all+5-length(s1); // фиксация номера последнего использованного символа
if length(s)=5 then s1:=COD(s) else s1:=s; // проверка условия завершения дешифрования
end;
l:=length(s1); // длина полученной комбинации
for i:=1 to 4-l do s1:='0'+s1; // добавление к остатку нулей для достижения длины равной5
Result:=s1; // получаем результат
end;


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin // распознание на ввод "0" и "1"
if Key in ['0','1'] then
if length(Edit1.Text)=11 then Key:=Chr(0) else Key:=Key
else Key:=Chr(0);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
iter:=0; // обнуление счётчика сдвига влево
Edit2.Text:=Chifr(Edit1.Text); // запускаем функцию кодирования
end;
function MakeError(str:string; n,len:Byte) : string;// функция искажения заданных битов
begin
if str[n]='1' then str[n]:='0' else str[n]:='1'; // меняем бит на противоположный
Result:=str;
end;

procedure TForm1.Button2Click(Sender: TObject);
var n:Integer;
begin
if Edit3.Text='' then n:=0 else n:=StrToInt(Edit3.Text); // исправление некорректно введенных данных
Edit4.Text:=MakeError(Edit2.Text,n,length(Edit2.Text)); // запуск функции искажения разряда

end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin // обеспечение корректного ввода данных
if not (Key in ['0','1','2','3','4','5','6','7','8','9']) then Key:=Chr(0);
end;
function vlevo(str:string):string;// вводим функция для осуществления сдвига влево
var s:string; i,len:Integer;
begin
len:=length(str);
SetLength(s,len);
for i:=1 to len-1 do s[i]:=str[i+1];
s[len]:=str[1];
Result:=s;
end;

function vpravo(str:string):string;// вводим функцию для осуществления сдвига вправо
var s:string; i,len:Integer;
begin
len:=length(str);
SetLength(s,len);
for i:=1 to len-1 do s[i+1]:=str[i];
s[1]:=str[len];
Result:=s;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
form1.close;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Edit4.Text:=vlevo(Edit4.Text); // запускаем функцию сдвига влево
iter:=iter+1; // считаем количество сдвигов влево
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Edit5.Text:=Raschifr(Edit4.Text); // запускаем функцию декодирования
end;

procedure TForm1.Button5Click(Sender: TObject);
var i,len,l:Integer; s,kor,err:string;
begin
kor:=Edit5.Text;
err:=Edit4.Text;
len:=length(err); // длина искаженной комбинации
l:=length(kor); // длина остатка
s:=err;
for i:=0 to l-1 do s[len-i]:=IntToStr((StrToInt(err[len-i])+StrToInt(kor[l-i])) mod 2)[1];
for i:=1 to Tag do s:=vpravo(s); // сдвигаем полученную комбинацию вправо
Edit6.Text:=s; // выводим полученный результат
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit6.Text:='';
end;

procedure TForm1.Label7Click(Sender: TObject);
begin
panel1.visible:=false;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
panel1.Visible:=true;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
showmessage();
end;

procedure TForm1.N4Click(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit6.Text:='';
end;

end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2013, 05:45
Ответы с готовыми решениями:

Аппаратная реализация AES шифра
Всем доброго времени суток. Мне необходимо реализовать (!)аппаратное(!)...

Аппаратная платформа
Добрый день! Подскажите пожалуйста, как написать программу, которая может...

Аппаратная организация
Всем привет! Подскажите пожалуйста что значит аппаратная реализация. Ну то...

Аппаратная виртуализация
Материнская плата ASUS P8H67-V. Как настроить для нее аппаратное ускорение, а...

Аппаратная виртуализация
Поддерживает ли процессор AMD A6-3410mx аппаратную виртуализацию?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2013, 05:45

Аппаратная защита от DDoS
Доброго всем времени суток. Поставил сервер и столкнулся с тем, что у меня...

Аппаратная ошибка видео
Скриншот прилагается. Повторяется постоянно, уже полгода, при тестах на...

Аппаратная кнопка back
Проблема с аппаратной кнопкой назад. Прописала код, но он не действует на нее....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru