Разработка системы генерации и проверки подлинности сертификата открытого ключа

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

sp;

Рисунок 10. - Форма просмотра полей сертификата

Рисунок 11. Архив

 

4. Листинг программы

 

4.1 Модуль главной формы FormMain

 

uses, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Wcrypt2, StdCtrls, unit2, sertif, Users, KeysForm, Verific, NewUser, DatM, Expo, Proc, Unit6, DatBase;= class(TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;Button1Click (Sender: TObject);GenKeyClick (Sender: TObject);VerifyClick (Sender: TObject);ExitClick (Sender: TObject);N3Click (Sender: TObject);N2Click (Sender: TObject);N4Click (Sender: TObject);FormClose (Sender: TObject; var Action: TCloseAction);ArchiveClick (Sender: TObject);

{Private declarations}

{Public declarations};: TMainF;

{$R *.dfm}TMainF. Button1Click (Sender: TObject);s, s1, s2: string;, f2: Boolean;;TMainF. GenKeyClick (Sender: TObject);. Button3. Enabled:= false;. Show;;TMainF. VerifyClick (Sender: TObject);. Show;;TMainF. ExitClick (Sender: TObject);. Close;;TMainF.N3Click (Sender: TObject);.pFIBDataSet1. Active:= true;. Show;;TMainF.N2Click (Sender: TObject);. SerN:= GetserNom;. IdAlgS:= GOST open key;. Izd:= GOST;. Org:= Org;. User:= User;. OpKU:= ;. SignAlg:= sign algoritm;. Edit2. Text:= DatM. User;. SpeedButton2. Enabled:= false;. SpeedButton3. Enabled:= false;. Show;;TMainF.N4Click (Sender: TObject);. Show;;TMainF. FormClose (Sender: TObject; var Action: TCloseAction);.pFIBDatabase1. Connected:= false;;TMainF. ArchiveClick (Sender: TObject);.pFIBDataSet1. Active:= true;. Show;;.

 

4.2 Модуль формы KeysForm

KeysForm;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Proc, Wcrypt2, ComCtrls, Expo;= class(TForm): TButton;: TComboBox;: TButton;: TLabel;: TMemo;: TLabel;: TLabel;: TEdit;: TUpDown;: TCheckBox;: TButton;Button1Click (Sender: TObject);FormActivate (Sender: TObject);Button2Click (Sender: TObject);Button3Click (Sender: TObject);

{Private declarations}

{Public declarations};: TKeys;Math;

{$R *.dfm}createCont (nameCon: String);cont: PChar;, con: string;: PHCRYPTPROV;

// Выполняем создание контейнера или подключение к нему

// Имя контейнера берем из объекта EdtCont

// имя контейнера con

//if length (edtCont. Text) = 0 then:=nameCon;:= Con;:= StrAlloc (length(name) + 1);(cont, name);

// пытаемся подключиться к контейнеруnot CryptAcquireContext (@hContext, cont, nil, PROV_RSA_FULL, 0) then // если не удалось подключиться

// создаем новый контейнер с введенным именем

if not CryptAcquireContext (@hContext, cont, nil, PROV_RSA_FULL,_NEWKEYSET) then

//error:= GetLastError;( Ошибка создания контейнера:, mtInformation, [mbOK], 0);;MessageDlg ( Создан контейнер с именем + name,, [mbOK], 0);MessageDlg (Подключились к контейнеру +name, mtInformation, [mbOK], 0);;GenKey (s:string); // (Sender: TObject);: PChar;, KeyL1, KeyLS: string;: HCRYPTPROV;, SignKey: HCRYPTKEY;, keyLen: DWORD;. ReportMemo. Clear;

{считываем имя контейнера}

if length(s) = 0 then:= nil:= s;:= StrAlloc (length(err) + 1);(cont, err);;:= IntToStr (Keys. UpDown2. Position);(@hProv, cont, nil, PROV_RSA_FULL, 0);:= strtoint(KeyLS);Keys. CheckBox2. Checked then:= keyLen shl 16;not CryptGenKey (hProv, AT_SIGNATURE, flag, @SignKey) thenint64 (GetLastError) of_INVALID_HANDLE: err:= ERROR_INVALID_HANDLE;_INVALID_PARAMETER: err:= ERROR_INVALID_PARAMETER;_BAD_FLAGS: err:= NTE_BAD_FLAGS;_BAD_ALGID: err:= NTE_BAD_ALGID;_BAD_UID: err:= NTE_BAD_UID;_FAIL: err:= NTE_FAIL;err:= Unknown error;;(Ошибка создания ключа подписи: + err, mtError, [mbOK], 0);. ReportMemo. Lines. Add();. ReportMemo. Lines. Add (Создан ключ подписи:);

flag:= 4;not CryptGetKeyParam (SignKey, KP_KEYLEN, @keyLen, @flag, 0) then;(Ошибка получения длины ключа: + err,, [mbOK], 0);Keys. ReportMemo. Lines. Add ( длина ключа - + inttostr(keyLen));:= 4;not CryptGetKeyParam (SignKey, KP_ALGID, @keyLen, @flag, 0) then;(Ошибка получения длины ключа: + err, mtError, [mbOK], 0);Keys. ReportMemo. Lines. Add ( алгоритм - + inttostr(keyLen));;;(hProv, 0);;TKeys. Button1Click (Sender: TObject);: string;Keys. ConComboBox. Text<> then:=ConComboBox. Text;(s);. Items. Add(s);. Button2. Enabled:= true;( Введите имя контейнера, mtInformation, [mbOK], 0);;TKeys. FormActivate (Sender: TObject);. ReportMemo. Clear;. Button2. Enabled:= false;;TKeys. Button2Click (Sender: TObject);, l: String;:= ConComboBox. Text;:= IntToStr (UpDown2. Position);Length(s)=0 then( Введите имя контейнера, mtInformation, [mbOK], 0);;begin(s);. Enabled:= true;;;TKeys. Button3Click (Sender: TObject);. ComboBox1. Text:= Keys. ConComboBox. Text;. Show;;.

 

4.3 Модуль формы NewUser

NewUser;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Buttons, Expo, Sertif, Proc, ExtCtrls, Wcrypt2, DatM, expOp, Users, AddUsers;= class(TForm): TEdit;: TButton;: TEdit;: TUpDown;: TButton;: TEdit;: TLabel;: TLabel;: TLabel;: TButton;: TSpeedButton;: TPanel;: TLabel;: TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;: TMemo;: TSaveDialog;: TOpenDialog;: TSpeedButton;: TSpeedButton;: TEdit;: TEdit;: TLabel;SpeedButton1Click (Sender: TObject);FormActivate (Sender: TObject);Button1Click (Sender: TObject);Button2Click (Sender: TObject);Button3Click (Sender: TObject);SpeedButton2Click (Sender: TObject);SpeedButton3Click (Sender: TObject);

{Private declarations}

{Public declarations};: TNewU;

{$R *.dfm}TNewU. SpeedButton1Click (Sender: TObject);. SerNom. Text:= DatM. SerN;.p1:= DateToStr (PerS. DateTime);.p2:= DateToStr (PerEnd. DateTime);. Show;;TNewU. FormActivate (Sender: TObject);;. Enabled:= DatM.flag;;TNewU. Button1Click (Sender: TObject);(Edit1. Text);;TNewU. Button2Click (Sender: TObject);: string;:= IntToStr (UpDown1. Position);Length (Edit1. Text)=0 then( Введите имя контейнера, mtInformation, [mbOK], 0);;begin(Edit1. Text, l);. Enabled:= true;;;TNewU. Button3Click (Sender: TObject);, S, path: String;: PChar;: string;: HCRYPTPROV;: ALG_ID;: HCRYPTHASH;, f1: file;: DWORD;: array [0..511] of byte;: PBYTE;:string;:integer;: HCRYPTKEY;, textsize: DWORD;: PBYTE;: PBYTE;:array [0..9] of char;:integer;: TextFile;. Lines. Add (Серийный номер + DatM. SerN);1. Lines. Add (Идентификатор алгоритма подписи + DatM. IdAlgS);. Lines. Add (Имя издателя +DatM. Izd);. Lines. Add (Период действия);. Lines. Add (c +DateToStr (PerS. DateTime)+ 00:00:00);. Lines. Add (до +DateToStr (PerEnd. DateTime)+ 00:00:00);. Lines. Add (Имя субъекта + DatM. Org+ + DatM. User);. Lines. Add (Открытый ключ субъекта + DatM. OpKU);. Lines. Add (Подпись УЦ алгоритм: + DatM. SignAlg);:= ExtractFilePath (Application. ExeName)+temp.txt;(ft, path);(ft);i:= 0 to 6 do:= Memo1. Lines[i];(ft, s);;

s:= Открытый ключ субъекта + DatM. OpKU;(ft, s);:= Подпись УЦ алгоритм: + DatM. SignAlg;(ft, s);(ft);AdmKey. Text= then(Не выбран ключ подписи!!!, mtWarning, [mbOK], 0);;begin:= CALG_SHA;:= AdmKey. Text;:= StrAlloc (length(name) + 1);(cont, name);not CryptAcquireContext (@hProv, cont, nil, PROV_RSA_FULL, 0) then(Ошибка открытия контейнера!!!, mtError, [mbOK], 0);;;not CryptCreateHash (hProv, alg, 0, 0, @hash) then(Ошибка создания хеш-объекта!!!, mtError, [mbOK], 0);;;SaveDialog1. Execute then begin:=SaveDialog1. FileName;. Text:= str;:=pos (.cer, str);posn 0 then delete (str, 1, posn-1)str:=;i:=0 to length(str) - 1 do[i]:=str [i+1];i:=length(str) to 9 do[i]:=#0;(F1, format, 10);(f1, alg, 4);(f2, path);(f2, 1);:= FileSize(f2);(f1, size, 4);not eof(f2) do(f2, buf{^}, 512, size);(f1, buf, size);not CryptHashData (hash, @buf, size, 0) then(Ошибка при хешировании!!!, mtError, [mbOK], 0);;;;(f2);not CryptSignHash (hash, AT_SIGNATURE, nil, 0, nil, @size) then

begin(Ошибка при определении размера подписи!!!, mtError, [mbOK], 0);

CloseFile(f1);;;(signature, size);not CryptSignHash (hash, AT_SIGNATURE, nil, 0, signature, @size) then(Ошибка при подписании хеша!!!, mtError, [mbOK], 0);(f1);;;(f1, size, 4);(f1, signature^, size);(f1);not CryptDestroyHash(hash) then(Ошибка при уничтожения хеша!!!, mtError, [mbOK], 0);;not CryptReleaseContext