ЛАБОРАТОРНАЯ РАБОТА ПО ДИСЦИПЛИНЕ
"ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ"
Лабораторная работа 8. Шифрование при помощи операций с битами.
К
операциям с битами информации относятся такие функции как not, and, or, xor, shl, shr. В данном методе мы будем использовать функцию shl. Эта функция бинарная и работает только с целыми
числами. Операция i_shl_j сдвигает содержимое I на j битов влево, освободившиеся
биты заполняются нулями. Например, найдем 2 shl 1.
1 шаг.
Переведем
число 2 в двоичноую систему счисления. 210=1*21+0*20=102.
2 шаг.
Так как у
нас длина машинного слова = 8 битов, то 2 в 2-ой с.с.
будет равняться 00000010. применим сюда функцию shl.
00000010
shl
результат=00000100
переведем
это число в 10 с.с. это равняется 4.
Соответственно
функция Shr делает наоборот.
Теперь
создадим программу, которая будет шифровать сообщение при помощи этой функции.
Создайте
проект и разместите на форме следующие компоненты (см рис 14).

Рис 14. Окончательный вид
формы.
Листинг
программы приведен ниже
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
Label3: TLabel;
Button2: TButton;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
Form1: TForm1;
a,b,c:integer;// вспомогательные переменные
txt:string;// открыиый текст
res:string; // рез-т
mas:array[1..100] of integer; // массив целых чисел для рез-та
implementation
{$R *.dfm}
// шифровать
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
res:=''; // результат
a:=strtoint(edit1.text);// ключ
txt:=edit2.Text; // txt присваиваем текст
b:=length(txt); // считаем кол-во
символов
for i:=1 to b do begin / / начинаем цикл , берем первый
символ
c:=ord(txt[i]) shl a; // берем код буквы под номером i, и сдвигаем его на а
// влево
res:=res+inttostr(c); // переменной res присваиваем рез -т
mas[i]:=c; // в массив закидываем цифру
end;
label3.Caption:=res;// вывод рез - та
end;
// Расшифровать
procedure TForm1.Button2Click(Sender: TObject);
var i,n:integer;
begin
res:='';// рез -ат
txt:=label3.Caption; // шифротекст
b:=length(txt); // считаем кол-во
символов
i:=1;
while i<b do begin // пока не переберем все символы
c:=mas[i]; // переменной с присваиваем элемент массива
n:=c shr a; // переменной n – рез –т сдвига Эл-та массива на ключ
res:=res+chr(n); // присвоение рез-та
i:=i+1; // увеличиваем счетчик
end;
label4.Caption:=res; // вывод рез-та
end;
end.
Запустите
программу и проверьте результат.
Самостоятельное
задание
Сделайте
так, чтобы можно было вводить в поле для ключа не только цифр, но и буквы.
Шифрование с использованием функции тиражирования.
При данном
методе шифрования берется по отдельности каждая буква открытого текста. Затем
берется ее код. Код переводится в двоичную систему счисления. И каждый символ
двоичного кода повторяется три раза. Пример:
Шифруем
слов Привет.
Берем код
буквы П, пусть он будет равен 124.
Переводим
124 в двоичную систему счисления.
Пусть он
будет выглядеть следующим образом: 110010101
Теперь
применим функцию тиражирования
111111000000111000111000111
т.е.
первая единица повторилась три раза, также вторая единица повторилась три раза
и т.д.
Дешифрование
происходит в обратном порядке.
Задание:
Создайте такую программу в среде Delphi.