📄 frmcsrdemo.pas
字号:
unit frmCSRDemo;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, SBUtils, SBPKCS10, SBConstants;
type
TCSRDemoForm = class(TForm)
Label1: TLabel;
groupAlgorithms: TGroupBox;
radioKeyType1: TRadioButton;
radioKeyType2: TRadioButton;
radioKeyType3: TRadioButton;
radioKeyType4: TRadioButton;
groupKeyLength: TGroupBox;
comboKeyLen: TComboBox;
Label3: TLabel;
Label2: TLabel;
groupSubjectProps: TGroupBox;
Label13: TLabel;
Label14: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
editState: TEdit;
editLocality: TEdit;
editOrganization: TEdit;
editOrgUnit: TEdit;
editCommonName: TEdit;
editCountry: TMaskEdit;
Label4: TLabel;
editEMail: TEdit;
Label5: TLabel;
btnGenerate: TButton;
Label6: TLabel;
groupFormat: TGroupBox;
comboFormat: TComboBox;
groupFileNames: TGroupBox;
btnSaveResults: TButton;
Label7: TLabel;
editCSRFile: TEdit;
btnBrowseCSR: TButton;
Label8: TLabel;
editKeyFile: TEdit;
btnBrowseKey: TButton;
dlgCSR: TSaveDialog;
dlgKey: TSaveDialog;
Label9: TLabel;
editPassword: TEdit;
procedure comboFormatChange(Sender: TObject);
procedure editCSRFileChange(Sender: TObject);
procedure editKeyFileChange(Sender: TObject);
procedure comboKeyLenChange(Sender: TObject);
procedure editCommonNameChange(Sender: TObject);
procedure editCountryChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnGenerateClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnBrowseCSRClick(Sender: TObject);
procedure btnBrowseKeyClick(Sender: TObject);
procedure btnSaveResultsClick(Sender: TObject);
private
{ Private declarations }
protected
FRequest : TElCertificateRequest;
FGenerated: boolean;
procedure UpdateSaveResultsButton;
procedure UpdateGenerateButton;
public
{ Public declarations }
end;
var
CSRDemoForm: TCSRDemoForm;
implementation
{$R *.DFM}
procedure TCSRDemoForm.comboFormatChange(Sender: TObject);
begin
UpdateSaveResultsButton;
end;
procedure TCSRDemoForm.UpdateSaveResultsButton;
begin
btnSaveResults.Enabled := (comboFormat.ItemIndex >= 0) and (editCSRFile.Text <> '') and (editKeyFile.Text <> '') and (FGenerated);
end;
procedure TCSRDemoForm.editCSRFileChange(Sender: TObject);
begin
UpdateSaveResultsButton;
end;
procedure TCSRDemoForm.editKeyFileChange(Sender: TObject);
begin
UpdateSaveResultsButton;
end;
procedure TCSRDemoForm.comboKeyLenChange(Sender: TObject);
begin
UpdateGenerateButton;
end;
procedure TCSRDemoForm.editCommonNameChange(Sender: TObject);
begin
UpdateGenerateButton;
end;
procedure TCSRDemoForm.editCountryChange(Sender: TObject);
begin
UpdateGenerateButton;
end;
procedure TCSRDemoForm.UpdateGenerateButton;
begin
btnGenerate.Enabled := (comboKeyLen.ItemIndex >= 0) and (editCountry.Text <> '') and (editCommonName.Text <> '');
end;
procedure TCSRDemoForm.FormCreate(Sender: TObject);
begin
FRequest := TElCertificateRequest.Create(nil);
comboFormat.ItemIndex := 0;
comboKeyLen.ItemIndex := 2;
end;
procedure TCSRDemoForm.btnGenerateClick(Sender: TObject);
var
Algorithm: integer;
Hash: integer;
SaveCursor : TCursor;
begin
FRequest.Subject.Count := 7;
FRequest.Subject.Values[0] := editCountry.Text;
FRequest.Subject.OIDs[0] := SB_CERT_OID_COUNTRY;
FRequest.Subject.Values[1] := editState.Text;
FRequest.Subject.OIDs[1] := SB_CERT_OID_STATE_OR_PROVINCE;
FRequest.Subject.Values[2] := editLocality.Text;
FRequest.Subject.OIDs[2] := SB_CERT_OID_LOCALITY;
FRequest.Subject.Values[3] := editOrganization.Text;
FRequest.Subject.OIDs[3] := SB_CERT_OID_ORGANIZATION;
FRequest.Subject.Values[4] := editOrgUnit.Text;
FRequest.Subject.OIDs[4] := SB_CERT_OID_ORGANIZATION_UNIT;
FRequest.Subject.Values[5] := editCommonName.Text;
FRequest.Subject.OIDs[5] := SB_CERT_OID_COMMON_NAME;
FRequest.Subject.Values[6] := editEMail.Text;
FRequest.Subject.OIDs[6] := SB_CERT_OID_EMAIL;
Algorithm := SB_CERT_ALGORITHM_UNKNOWN;
Hash := SB_CERT_ALGORITHM_UNKNOWN;
if radioKeyType1.Checked then
begin
Algorithm := SB_CERT_ALGORITHM_ID_RSA_ENCRYPTION;
Hash := SB_CERT_ALGORITHM_MD2_RSA_ENCRYPTION;
end
else
if radioKeyType2.Checked then
begin
Algorithm := SB_CERT_ALGORITHM_ID_RSA_ENCRYPTION;
Hash := SB_CERT_ALGORITHM_MD5_RSA_ENCRYPTION;
end
else
if radioKeyType3.Checked then
begin
Algorithm := SB_CERT_ALGORITHM_ID_RSA_ENCRYPTION;
Hash := SB_CERT_ALGORITHM_SHA1_RSA_ENCRYPTION;
end
else
if radioKeyType4.Checked then
begin
Algorithm := SB_CERT_ALGORITHM_ID_DSA;
Hash := SB_CERT_ALGORITHM_ID_DSA_SHA1;
end;
SaveCursor := Cursor;
Screen.Cursor := crHourGlass;
FRequest.Generate(Algorithm, StrToIntDef(comboKeyLen.Text, 1024), Hash);
Screen.Cursor := SaveCursor;
FGenerated := true;
UpdateSaveResultsButton;
end;
procedure TCSRDemoForm.FormDestroy(Sender: TObject);
begin
FRequest.Free;
end;
procedure TCSRDemoForm.btnBrowseCSRClick(Sender: TObject);
begin
dlgCSR.FileName := editCSRFile.Text;
if dlgCSR.Execute then
begin
editCSRFile.Text := dlgCSR.FileName;
UpdateSaveResultsButton;
end;
end;
procedure TCSRDemoForm.btnBrowseKeyClick(Sender: TObject);
begin
dlgKey.FileName := editKeyFile.Text;
if dlgKey.Execute then
begin
editKeyFile.Text := dlgKey.FileName;
UpdateSaveResultsButton;
end;
end;
procedure TCSRDemoForm.btnSaveResultsClick(Sender: TObject);
var Stream : TFileStream;
begin
Stream := TFileStream.Create(editCSRFile.Text, fmCreate or fmShareDenyWrite);
try
if comboFormat.ItemIndex = 0 then
FRequest.SaveToStreamPEM(Stream)
else
FRequest.SaveToStream(Stream);
finally
Stream.Free;
end;
Stream := TFileStream.Create(editKeyFile.Text, fmCreate or fmShareDenyWrite);
try
if comboFormat.ItemIndex = 0 then
FRequest.SaveKeyToStreamPEM(Stream, editPassword.Text)
else
FRequest.SaveKeyToStream(Stream);
finally
Stream.Free;
end;
end;
initialization
SetLicenseKey('ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76' +
'FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C' +
'F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47' +
'5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9' +
'F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A' +
'8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43' +
'DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8' +
'BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F');
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -