⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmcsrdemo.pas

📁 著名的SecureBlackBox控件完整源码
💻 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 + -