Автор работы: Пользователь скрыл имя, 09 Апреля 2014 в 14:36, курсовая работа
Аббат Тритемеус – автор первой печатной книги о тайнописи (1518 г.) – предложил несколько шифров и среди них шифр, который можно считать усовершенствованием шифра Цезаря. Этот шифр устроен так. Все буквы алфавита нумеруются по порядку (от 1 до 31 в русском варианте). Затем выбирают какое-нибудь слово, называемое "ключом", и подписывают под сообщением с повторением.
Введение - 3 -
1. Постановка задачи - 5 -
2. Алгоритм создания компонента - 5 -
3. Исходный текст компонента - 7 -
4. Инструкция пользователя - 13 -
5. Исходный текст программы - 14 -
6. Приложение 1 - 17 -
Список литературы - 21 -
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Пермский национальный исследовательский политехнический университет»
Березниковский филиал
(БФ ПНИПУ)
КУРСОВАЯ РАБОТА
по дисциплине «Технология программирования»
«Создание компонента для шифрования-дешифрования текста»
Выполнил: студент группы ИВТ-09д ______________ Яковлев Д.В.
Дата сдачи «____» _________ 20___ г.
Проверил: ассистент кафедры АТП _____________Иванова Е.В.
Оценка «___________________»
Дата проверки «____» _________ 20___ г.
Березники, 2011
Развитие шифров исторически шло одновременно с развитием письменности. В первую очередь они нужны были правителям, прибегавших к услугам лазутчиков, дипломатам, состоявшим у них на службе, служителям культа, стремившихся ограничить доступ непосвященных к эзотерическим религиозным секретам
При создании компонента шифрования текста я использовал три метода шифрования: алгоритм «Цезаря», алгоритм «Модифицированного Цезаря» и алгоритм «Скитала».
1.Алгоритм шифрования «Цезарь»
Шифр Цезаря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций – на значение ключа. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены.
Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки. Естественным развитием шифра Цезаря стал шифр Виженера. С точки зрения современного криптоанализа, шифр Цезаря не имеет приемлемой стойкости.
2.Шифр «Модифицированного
Аббат Тритемеус – автор первой печатной книги о тайнописи (1518 г.) – предложил несколько шифров и среди них шифр, который можно считать усовершенствованием шифра Цезаря. Этот шифр устроен так. Все буквы алфавита нумеруются по порядку (от 1 до 31 в русском варианте). Затем выбирают какое-нибудь слово, называемое "ключом", и подписывают под сообщением с повторением.
Чтобы получить шифрованный текст, складывают номер очеред-ной буквы с номером соответствующей буквы ключа. Если полученная сумма больше 31, то из нее вычитают 31. В результате получают последовательность чисел от 1 до 31. Вновь заменяя числа этой последовательности соответствующими буквами, получают шифрованный текст. Разбиваем этот текст на группы одной длины, получают шифрованное сообщение.
3. Шифр «Скитала»
В криптографии скитала (или сцитала от греческого σκυτάλη, жезл), известный также как шифр Древней Спарты, представляет собой прибор, используемый для осуществления перестановочного шифрования, состоит из цилиндра и узкой полоски пергамента, обматывавшейся вокруг него по спирали, на которой писалось сообщение. Античные греки и спартанцы в частности, использовали этот шифр для связи во время военных кампаний.
Шифруемый текст писался на пергаментной ленте по длине палочки, после того как длина палочки оказывалась исчерпанной, она поворачивалась и текст писался далее, пока либо не заканчивался текст, либо не исписывалась вся пергаментная лента. В последнем случае использовался очередной кусок пергаментной ленты. Дешифровка выполнялась с использованием палочки такого же диаметра.
Таким образом, длина блока n определялась длиной и диаметром палочки, а само шифрование заключалось в перестановке символов исходного текста в соответствии с длиной окружности палочки. Например, используя палочку, по длине окружности которой помещается 4 символа, а длина палочки позволяет записать 6 символов, исходный текст: «это шифр древней спарты» превратится в шифрограмму: «эфвптрнао ер дйтшр ыиес».
Создать компонент для шифрования – дешифрования текста тремя алгоритмами (алгоритм «Цезаря», алгоритм «Модифицированного Цезаря», алгоритм «Скитала») и применить его в программе.
constructor Create(AOwner: TComponent); override;
inherited Create(AOwner); {Вызываем унаследованный
конструктор}
Options := Options + [ofFileMustExist, ofPathMustExist]; {Выполняем необходимые
нам действия}
unit ShifText;
interface
uses
SysUtils, Classes, Dialogs;
type
TShifText = class(TOpenDialog)
private
{ Private declarations }
protected
{ Protected declarations }
public
function AlgCez(S,Cl:string):string;
function DeAlgCez(S,Cl:string):string;
function AlgVijen(S,Cl:string):string;
function DeAlgVijen(S,Cl:string):
function AlgSkit(S,Cl:string):string;
function DeAlgSkit(S,Cl:string):string;
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('My Component', [TShifText]);
end;
{ TShifText }
constructor TShifText.Create(AOwner: TComponent);
begin
inherited Create(AOwner); {Вызываем унаследованный конструктор}
Options := Options + [ofFileMustExist, ofPathMustExist]; {Выполняем необходимые нам действия}
end;
function TShifText.AlgCez(S,Cl:string):
var i,k,k1,a,Cluch:Integer;
begin
Cluch:=StrToInt(Cl);
for i:=1 to Length(S) do
begin
k:=Ord(S[i]);
k1:=k+Cluch;
if (k1>=255) then
begin
a:=k1-255;
k1:=a+1;
end;
S[i]:=Chr(k1);
end;
Result:=S;
end;
function TShifText.DeAlgCez(S,Cl:
var i,k,k1,a,Cluch:integer;
begin
Cluch:=StrToInt(Cl);
for i:=1 to Length(S) do
begin
k:=Ord(S[i]);
k1:=k-Cluch;
if (k1<=1) then
begin
a:=1-k1;
k1:=255-a;
end;
S[i]:=Chr(k1);
end;
Result:=S;
end;
function TShifText.AlgVijen(S,Cl:
var i,k,k1,a,Cluch,Cl1:Integer;
begin
Cluch:=StrToInt(Cl);
Cl1:=1;
for i:=1 to Length(S) do
begin
k:=Ord(S[i]);
if Cl1<Cluch then
begin
k1:=k+Cl1;
if k1>=255 then
begin
a:=k1-255;
k1:=a+1;
end;
end
else if Cl1=Cluch then
begin
k1:=k+Cl1;
if k1>=255 then
begin
a:=k1-255;
k1:=a+1;
end;
end
else
begin
Cl1:=1;
begin
k1:=k+Cl1;
if k1>=255 then
begin
a:=k1-255;
k1:=a+1;
end;
end;
end;
S[i]:=Chr(k1);
Cl1:=Cl1+1;
end;
Result:=S;
end;
function TShifText.DeAlgVijen(S,Cl:
var i,k,k1,a,Cluch,Cl1:integer;
begin
Cluch:=StrToInt(Cl);
Cl1:=1;
for i:=1 to Length(S) do
begin
k:=Ord(S[i]);
k1:=k-1;
if Cl1<Cluch then
begin
k1:=k-Cl1;
if k1<=1 then
begin
a:=1-k1;
k1:=255-a;
end;
end
else if Cl1=Cluch then
begin
k1:=k-Cl1;
if k1<=1 then
begin
a:=1-k1;
k1:=255-a;
end;
end
else
begin
Cl1:=1;
k1:=k-Cl1;
if k1<=1 then
begin
a:=1-k1;
k1:=255-a;
end;
end;
S[i]:=Chr(k1);
Cl1:=Cl1+1;
end;
Result:=S;
end;
function TShifText.AlgSkit(S,Cl:string)
var S1,n:string;i,j,a,Cl2,Cl1,d:
begin
Cl2:=StrToInt(Cl);
if (Length(S) mod Cl2=0) then Cl1:=(Length(S)div Cl2)
else
Cl1:=(Length(S)div Cl2)+1;
a:=1;
Setlength(mas,Cl2,Cl1+1);
for j:=0 to Cl1 do
for i:=0 to Cl2-1 do
if a<=Length(S) then
begin
if (Ord(S[a])=13) then S[a]:=Char(149);
if (Ord(S[a])=10) then inc(a);
mas[i,j]:=S[a];
inc (a);
end
else
begin
mas[i,j]:=' ';
inc (a);
end;
S1:='';
n:='';
for i:=0 to Cl2-1 do
for j:=0 to Cl1-1 do
begin
n:=mas[i,j];
S1:=S1+n;
inc (a);
end;
Result:=S1;
end;
function TShifText.DeAlgSkit(S,Cl:
var S1,n:string;i,j,a,Cl2,Cl1,k:
begin
k:=0;
Cl2:=StrToInt(Cl);
if (Length(S) mod Cl2=0) then Cl1:=(Length(S)div Cl2)
else
Cl1:=(Length(S)div Cl2)+1;
a:=1;
Setlength(mas,Cl1+1,Cl2);
for j:=0 to Cl2-1 do
for i:=0 to Cl1-1 do
if a<=Length(S) then
begin
if (Ord(S[a])=149) then S[a]:=Char(13);
if (Ord(S[a])=10) then inc(a);
mas[i,j]:=S[a];
inc (a);
end
else
begin
mas[i,j]:=' ';
inc (a);
end;
n:='';
S1:='';
for i:=0 to Cl1-1 do
for j:=0 to Cl2-1 do
begin
n:=mas[i,j];
begin
S1:=S1+n;
inc (k);
end;
end;
Result:=S1;
end;
end.
Данная программа «Шифратор-дешифратор» (внешний вид программы до начала работы, Приложение 1, Рис. 1) обладает следующими возможностями:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ShifText, ExtCtrls, jpeg, Spin, XPMan;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var s:string; //шифрования текст алгоритмом "Цезаря";
begin
if (Memo1.Text<>'')and(SpinEdit1.
begin
Memo2.Text:=ShifText1.AlgCez(
end else //иначе выводим сообщение об ошибке;
begin
s:='Сначало введите текст или откройте текстовый файл!!!'#13#10;
MessageBox(handle,PChar(S),'
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
if ShifText1.Execute then
begin
Memo1.Lines.LoadFromFile(
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var s:string; //дешифрование текста алгоритмом "Цезаря";
begin
if (Memo2.Text<>'')and(SpinEdit1.
begin
Memo5.Text:=ShifText1.
end else //иначе выводим сообщение об ошибке;
begin
s:='Сначало введите текст или откройте текстовый файл!!!'#13#10;
MessageBox(handle,PChar(S),'
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var s:string; //шифрования текст алгоритмом "Модифицированного Цезаря";
begin
if (Memo1.Text<>'')and(SpinEdit1.
begin
Memo3.Text:=ShifText1.
end else //иначе выводим сообщение об ошибке;
begin
s:='Сначало введите текст или откройте текстовый файл!!!'#13#10;
MessageBox(handle,PChar(S),'
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var s:string; //дешифрование текста алгоритмом "Модифицированного Цезаря";
begin
if (Memo3.Text<>'')and(SpinEdit1.
begin
Memo6.Text:=ShifText1.
end else //иначе выводим сообщение об ошибке;
begin
s:='Сначало введите текст или откройте текстовый файл!!!'#13#10;
MessageBox(handle,PChar(S),'
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
var s:string; //шифрование текста алгоритмом "Скитала";
begin
if (Memo1.Text<>'')and(SpinEdit1.
begin
Memo4.Text:=ShifText1.AlgSkit(
end else //иначе выводим сообщение об ошибке;
begin
s:='Сначало введите текст или откройте текстовый файл!!!'#13#10;
MessageBox(handle,PChar(S),'
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
Информация о работе Создание компонента для шифрования-дешифрования текста