selwincertform.pas
来自「著名的SecureBlackBox控件完整源码」· PAS 代码 · 共 163 行
PAS
163 行
unit SelWinCertForm;
interface
uses
{$ifdef DELPHI_NET}
System.ComponentModel,
{$endif}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls,
SBWinCertStorage, SBX509, SBX509Ext, SBUtils, StdCtrls, ExtCtrls;
type
TfrmSelWinCert = class(TForm)
lvCerificates: TListView;
Label1: TLabel;
btnOK: TButton;
btnCancel: TButton;
Panel1: TPanel;
lbPrivateKey: TLabel;
dlbPrivateKey: TLabel;
lbUsage: TLabel;
dlbUsage: TLabel;
procedure lvCerificatesChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FCertificate: TElX509Certificate;
public
WinCertStorage: TElWinCertStorage;
procedure UpdateCertificates;
procedure UpdateCertInfo;
property Certificate: TElX509Certificate read FCertificate;
end;
var
frmSelWinCert: TfrmSelWinCert;
implementation
{$R *.dfm}
procedure TfrmSelWinCert.FormCreate(Sender: TObject);
begin
WinCertStorage := TElWinCertStorage.Create(nil);
WinCertStorage.SystemStores.Text := 'MY';
UpdateCertificates;
UpdateCertInfo;
end;
procedure TfrmSelWinCert.FormDestroy(Sender: TObject);
begin
FreeAndNil(WinCertStorage);
end;
procedure TfrmSelWinCert.lvCerificatesChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
if Assigned(lvCerificates.Selected) then
FCertificate := TElX509Certificate(lvCerificates.Selected.Data)
else
FCertificate := nil;
UpdateCertInfo;
end;
procedure TfrmSelWinCert.UpdateCertInfo;
var
KeyUsage: TElKeyUsageExtension;
ExtKeyUsage: TElExtendedKeyUsageExtension;
s: string;
begin
if not Assigned(FCertificate) then
begin
dlbPrivateKey.Caption := 'None';
dlbUsage.Caption := 'None';
Exit;
end;
if FCertificate.PrivateKeyExists then
dlbPrivateKey.Caption := 'Available'
else
dlbPrivateKey.Caption := 'None';
s := '';
{$ifndef DELPHI_NET}
if ceKeyUsage in FCertificate.Extensions.Included then
{$else}
if (FCertificate.Extensions.Included and ceKeyUsage) = ceKeyUsage then
{$endif}
begin
KeyUsage := FCertificate.Extensions.KeyUsage;
if KeyUsage.DigitalSignature then
s := s + 'Digital Signitare, ';
if KeyUsage.NonRepudiation then
s := s + 'Non-repudiation, ';
if KeyUsage.KeyEncipherment then
s := s + 'Key Transport, ';
if KeyUsage.DataEncipherment then
s := s + 'Data Encipherment, ';
if KeyUsage.KeyAgreement then
s := s + 'Key Agreement, ';
if KeyUsage.KeyCertSign then
s := s + 'Certificate Signing, ';
if KeyUsage.CRLSign then
s := s + 'CRL Signing, ';
if KeyUsage.EncipherOnly then
s := s + 'Encipher only, ';
if KeyUsage.DecipherOnly then
s := s + 'Decipher only, ';
if Length(s) > 0 then
Delete(s, Length(s) - 1, 2);
end;
dlbUsage.Caption := s;
end;
procedure TfrmSelWinCert.UpdateCertificates;
var
i: Integer;
Cert: TElX509Certificate;
Item: TListItem;
s: string;
begin
for i := 0 to WinCertStorage.Count - 1 do
begin
Cert := WinCertStorage.Certificates[i];
Item := lvCerificates.Items.Add;
Item.Data := Cert;
// Serial Number
{$ifndef DELPHI_NET}
s := Cert.SerialNumber;
Item.Caption := BeautifyBinaryString(BinaryToString(@s[1], Length(s)), ' ');
{$else}
Item.Caption := BeautifyBinaryString(BinaryToString(Cert.SerialNumber), ' ');
{$endif}
// Subject
s := Cert.SubjectName.CommonName;
if s = '' then
s := Cert.SubjectName.Organization;
Item.SubItems.Add(s);
// Issuer
s := Cert.IssuerName.CommonName;
if s = '' then
s := Cert.IssuerName.Organization;
Item.SubItems.Add(s);
// Valid From
Item.SubItems.Add(DateTimeToStr(Cert.ValidFrom));
// Valid To
Item.SubItems.Add(DateTimeToStr(Cert.ValidTo));
// Private Key
if Cert.PrivateKeyExists then
Item.SubItems.Add('Yes')
else
Item.SubItems.Add('No');
end;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?