Разработка и программная реализация электронной цифровой подписи асимметричным методом шифрования данных
Электронная цифровая подпись. Асимметричные алгоритмы шифрования. Сценарий распределения открытых ключей, обмен сертификатами. Выбор программных средств. Математическая модель. Скорости Эль-Гамаля для различных длин модулей. Программная реализация.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 22.09.2011 |
Размер файла | 461,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
function iHash(tmp:string):string;
var
i,j,k:integer;
hash:hash_type;
tres,s:string;
begin
s:=ch8to64b(tmp);
i:=1;j:=1;k:=1;
while k<=length(s) do
begin
hash[i,j]:=StrToInt(s[k]);
inc(j);
inc(k);
if j>16 then
begin
inc(i);
j:=1;
end;
end;
tres:='';
for j:=1 to 16 do
tres:=tres+IntToStr(hash[1,j] xor
hash[2,j] xor hash[3,j] xor
hash[4,j]);
iHash:=Bin16ToStr(tres);
end;
//хешируем н-ое количество символов
function xHash(inp: string):string;
var
tmp,res,inp2:string;
i:integer;
begin
inp2:=inp;
while (length(inp) mod 8 <>0) do
begin
inp:=inp+'а';
end;
tmp:='';
res:='';
for i:=1 to length(inp) do
begin
tmp:=tmp+inp[i];
if (i mod 8 = 0) then
begin
res:= res+iHash(tmp);
tmp:='';
end;
end;
xHash:=res;
end;
//Генерация ключей
procedure TForm1.Button1Click(Sender: TObject);
begin
P:=StrToInt(Edit1.Text);
Q:=StrToInt(Edit2.Text);
RSA_keys(P,Q,N,fn,Ka,Kb); //вызываем процедуру генерирования ключей
Edit3.Text:=IntToStr(N);
Edit4.Text:=IntToStr(fn);
Edit5.Text:=IntToStr(Ka);
Edit6.Text:=IntToStr(Kb);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
input,shifr:string;
begin
if (Edit6.Text='')
then
ShowMessage('Сгенерируйте сначала ключи')
else
begin
input:= Edit7.Text;
//шифруем сообщение методом алгоритмом RSA
shifr:=shifrD(Ka,N,input);
Edit8.Text:=shifr;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var shifr,openText:string;
begin
shifr:= Edit8.Text;
//расшифр. сообщение, зашифрованное алгоритмом ELGAMAL
openText:=shifrD(Kb,N,shifr);
Edit9.Text:=openText;
end;
//проверяем цифровую подпись
procedure TForm1.Button5Click(Sender: TObject);
var res1,res2:string;
begin
//хешируем сообщение
res1:=xHash(Edit1x.Text);
Edit12.Text:=res1;
//расшифровуем текст после хеширования
res2:=shifr_hash(Edit11.Text,Ka,n);
Edit13.Text:=res2;
if res2=res1
then Label1.Caption:='Сообщение подлинно'
else Label1.Caption:='Сообщение было изменено';
end;
//процедура подключения к серверу
procedure ConnectToServer;
begin
//читаем номер порта из поля LEdit1
form1.ClientSocket1.Port:=StrToInt(form1.LEdit1.Text);
//читаем имя хоста из поля LEdit2
form1.ClientSocket1.Host:=form1.LEdit2.Text;
//активируем соединение с сервером
form1.ClientSocket1.Active:=true;
form1.Button6.Enabled:=false;
form1.Button7.Enabled:=true;
form1.Button8.Enabled:=true;
end;
//процедура отключения от сервера
procedure DisconFromServer;
begin
//деактивируем соединение с сервером
Form1.ClientSocket1.Active:=false;
Form1.Button7.Enabled:=false;
Form1.Button6.Enabled:=true;
Form1.Button8.Enabled:=false;
end;
//отсоединяемся от сервера
procedure TForm1.Button7Click(Sender: TObject);
begin
DisconFromServer;
end;
//отправка сообщения
procedure TForm1.Button8Click(Sender: TObject);
var
hashOut,SendText,x,UsrNm:string;
begin
UsrNm:=LEdit5.Text;
if ((cb1.ItemIndex<>1) and (Edit6.Text=''))
then ShowMessage('Сгенерируйте сначала ключи')
else
begin
if cb1.ItemIndex=0
then
begin
//шифруем сообщение методом ELGAMAL и отправляем на сервер
SendText:=shifrD(Ka,N,LEdit3.Text);
ClientSocket1.Socket.SendText('-mRS'+'~'+UsrNm+'~'+SendText+'~'+ IntToStr(Kb)+'~'+IntToStr(N));
end
else
if cb1.ItemIndex=1
then
begin
SendText:=LEdit3.Text;
//отправляем сообщение на сервер без шифроваеия и подписи
ClientSocket1.Socket.SendText('-msg' +'~'+UsrNm+'~'+SendText);
end
else
begin
//подписываем сообщение и отправляем на сервер
hashOut:=xHash(Ledit3.Text);
SendText:=shifr_hash(hashOut,Kb,n);
ClientSocket1.Socket.SendText('-mSI' +'~'+UsrNm+'~'+LEdit3.Text+'~'+SendText+'~'+IntToStr(Ka)+'~'+IntToStr(N));
end;
end;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Enabled:=false;
Form2.Show;
//ShowMessage('Succesful connect to server');
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('Server Disconected');
DisconFromServer;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ShowMessage('Server Error');
DisconFromServer;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
ChooseCommand(Socket.ReceiveText());
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
ConnectToServer;
end;
//прдписываем сообщение
procedure TForm1.Button11Click(Sender: TObject);
var
x,y:string;
begin
if (Edit6.Text='')
then ShowMessage('Сгенерируйте сначала ключи')
else
begin
label1.Caption:='';
//хешируем сообщение
x:=xHash(Edit1x.Text);
//шифруем сообщение после хеша
y:=shifr_hash(x,Kb,n);
Edit10.Text:=x;
Edit11.Text:=y;
end;
end;
procedure TForm1.Button12Click(Sender: TObject);
var x,y:string;
begin
//хешируем сообщение
x:=iHash(Edit1x.Text);
//расшифровываем сообщение после хеша
y:=shifr_hash(x,Kb,n);
Edit10.Text:=x;
Edit11.Text:=y;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm2 = class(TForm)
Edit1: TLabeledEdit;
Edit2: TLabeledEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.ClientSocket1.Socket.SendText('-ath'+'~'+Edit1.Text+'~'+Edit2.Text);
Form1.Enabled:=true;
Form1.LEdit5.Text:=Form2.Edit1.Text;
Form2.Close;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm3 = class(TForm)
Edit1: TLabeledEdit;
Edit2: TLabeledEdit;
Edit3: TLabeledEdit;
Edit4: TLabeledEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
Form1.ClientSocket1.Socket.SendText('-reg'+'~'+Edit1.Text+'~'+Edit2.Text+'~'+Edit3.Text+'~'+Edit4.Text);
Form1.Enabled:=true;
Form3.Close;
end;
end.
Размещено на Allbest.ru
Подобные документы
Назначение электронной цифровой подписи как реквизита электронного документа, предназначенного для его защиты с помощью криптографического ключа. Асимметричные алгоритмы шифрования и атаки на электронную подпись. Средства работы с цифровой подписью.
реферат [20,6 K], добавлен 09.10.2014Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009Правовое регулирование отношений в области использования электронной цифровой подписи. Понятие и сущность электронной цифровой подписи как электронного аналога собственноручной подписи, условия ее использования. Признаки и функции электронного документа.
контрольная работа [34,5 K], добавлен 30.09.2013История криптографии. Сравнение алгоритмов шифрования, применение в операционной системе. Анализ продуктов в области пользовательского шифрования. Включение и отключение шифрования на эллиптических кривых. Использование хеш-функции. Электронная подпись.
курсовая работа [492,6 K], добавлен 18.09.2016Схема формирования электронной цифровой подписи, её виды, методы построения и функции. Атаки на электронную цифровую подпись и правовое регулирование в России. Средства работы с электронной цифровой подписью, наиболее известные пакеты и их преимущества.
реферат [27,8 K], добавлен 13.09.2011Основы криптографических систем. Алгоритм создания открытого и секретного ключей. Схема передачи шифрованной информации и алгоритм для цифровой подписи. Преимущества и недостатки системы RSA. Основные формулы для создания RSA-ключей шифрования.
курсовая работа [683,6 K], добавлен 18.12.2011Организационно-правовое обеспечение электронной цифровой подписи. Закон "Об электронной цифровой подписи". Функционирование ЭЦП: открытый и закрытый ключи, формирование подписи и отправка сообщения. Проверка (верификация) и сфера применения ЭЦП.
курсовая работа [22,9 K], добавлен 14.12.2011Назначение и применение электронной цифровой подписи, история ее возникновения и основные признаки. Виды электронных подписей в Российской Федерации. Перечень алгоритмов электронной подписи. Подделка подписей, управление открытыми и закрытыми ключами.
курсовая работа [604,0 K], добавлен 13.12.2012Назначение и особенности применения электронной цифровой подписи, история ее возникновения, алгоритмы, схемы. Использование хэш-функций. Подделка подписей, модели атак и их возможные результаты. Управление ключами открытого типа. Хранение закрытого ключа.
презентация [883,5 K], добавлен 18.05.2017Разъяснения по использованию систем цифровой подписи в связи с ведением закона "Об электронной цифровой подписи". Пример практического применения механизма электронно-цифровой подписи: программа контроля подлинности документов, хранимых в базе данных.
контрольная работа [180,1 K], добавлен 29.11.2009