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

📄 keyring.cpp

📁 著名的SecureBlackBox控件完整源码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Keyring.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmSelectKeyring *frmSelectKeyring;
//---------------------------------------------------------------------------
__fastcall TfrmSelectKeyring::TfrmSelectKeyring(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
bool TryFileName(AnsiString BaseFileName, AnsiString NewFileName, bool OpenKeyring,
                 AnsiString &FoundFileName, AnsiString ValidBaseName)
{
    bool Result;
    bool BaseValid = ExtractFileName(BaseFileName) == ValidBaseName;
    BaseFileName = ExtractFilePath(BaseFileName) + NewFileName;
    if (OpenKeyring)
    {
        Result = FileExists(BaseFileName);
        if (Result)
            FoundFileName = BaseFileName;
    }
    else
    {
        Result = BaseValid;
        FoundFileName = BaseFileName;
    }
    return Result;
}
//---------------------------------------------------------------------------
bool TryExtension(AnsiString BaseFileName, AnsiString NewExtension, bool OpenKeyring, AnsiString &FoundFileName)
{
    bool Result;
    BaseFileName = ChangeFileExt(BaseFileName, NewExtension);
    if (OpenKeyring)
    {
        Result = FileExists(BaseFileName);
        if (Result)
            FoundFileName = BaseFileName;
    }
    else
    {
        Result = true;
        FoundFileName = BaseFileName;
    }
    return Result;
}
//---------------------------------------------------------------------------
bool FindKeyRingPair(AnsiString FileName, bool IsPublic, bool OpenKeyring, AnsiString &PubFileName, AnsiString SecFileName)
{
    bool Result = true;
    if (!OpenKeyring && (ExtractFileExt(FileName).IsEmpty()))
    {
        if (IsPublic)
            FileName = ChangeFileExt(FileName, ".pkr");
        else
            FileName = ChangeFileExt(FileName, ".skr");
    }

    PubFileName = "";
    SecFileName = "";
    if (IsPublic)
        PubFileName = FileName;
    else
        SecFileName = FileName;

    if (Result)
    {
        if (!PubFileName.IsEmpty())
        {
            if (TryFileName(PubFileName, "secring.skr", OpenKeyring, FileName, "pubring.pkr") ||
                TryFileName(PubFileName, "secring.seckr", OpenKeyring, FileName, "pubring.pubkr") ||
                TryFileName(PubFileName, "secring.pgp", OpenKeyring, FileName, "pubring.pgp") ||
                TryExtension(PubFileName, ".skr", OpenKeyring, FileName) ||
                TryExtension(PubFileName, ".seckr", OpenKeyring, FileName))
                SecFileName = FileName;
        }
        else
        {
            if (TryFileName(PubFileName, "pubring.pkr", OpenKeyring, FileName, "secring.skr") ||
                TryFileName(PubFileName, "pubring.pubkr", OpenKeyring, FileName, "secring.seckr") ||
                TryFileName(PubFileName, "pubring.pgp", OpenKeyring, FileName, "secring.pgp") ||
                TryExtension(PubFileName, ".pkr", OpenKeyring, FileName) ||
                TryExtension(PubFileName, ".pubkr", OpenKeyring, FileName))
                PubFileName = FileName;
        }

        Result = PubFileName.IsEmpty();
    }
    return Result;
}
//---------------------------------------------------------------------------
void __fastcall TfrmSelectKeyring::edtPubChange(TObject *Sender)
{
/*  if not FChanging and FindKeyRingPair(edtPub.Text, True, OpenKeyring, PubFileName,
    SecFileName) then
    begin
      FChanging := True;
      try
        edtSec.Text := SecFileName;
      finally
        FChanging := False;
      end;
    end;*/

  btnOK->Enabled = !edtPub->Text.IsEmpty();
}
//---------------------------------------------------------------------------
void __fastcall TfrmSelectKeyring::edtSecChange(TObject *Sender)
{
/*  if not FChanging and FindKeyRingPair(edtSec.Text, False, OpenKeyring, PubFileName,
    SecFileName) then
    begin
      FChanging := True;
      try
        edtPub.Text := PubFileName;
      finally
        FChanging := False;
      end;
    end;*/

  btnOK->Enabled = !edtPub->Text.IsEmpty();
}
//---------------------------------------------------------------------------
void __fastcall TfrmSelectKeyring::btnPubClick(TObject *Sender)
{
  if (OpenKeyring)
  {
      OpenDlg->Filter = "Public keyring files (*.pkr;*.pubkr;*.pgp)|*.pkr;*.pubkr;*.pgp|All files(*.*)|*.*";
      OpenDlg->FilterIndex = 1;
      OpenDlg->DefaultExt = ".pkr";
      OpenDlg->Title = "Select public keyring file";
      OpenDlg->FileName = edtPub->Text;
      if (OpenDlg->Execute())
          edtPub->Text = OpenDlg->FileName;
  }
  else
  {
      SaveDlg->Filter = "Public keyring files (*.pkr;*.pubkr;*.pgp)|*.pkr;*.pubkr;*.pgp|All files(*.*)|*.*";
      SaveDlg->FilterIndex = 1;
      SaveDlg->DefaultExt = ".pkr";
      SaveDlg->Title = "Select public keyring file";
      SaveDlg->FileName = edtPub->Text;
      if (SaveDlg->Execute())
          edtPub->Text = SaveDlg->FileName;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSelectKeyring::btnSecClick(TObject *Sender)
{
  if (OpenKeyring)
  {
      OpenDlg->Filter = "Private keyring files (*.skr;*.prvkr;*.pgp)|*.skr;*.prvkr;*.pgp|All files(*.*)|*.*";
      OpenDlg->FilterIndex = 1;
      OpenDlg->DefaultExt = ".skr";
      OpenDlg->Title = "Select private keyring file";
      OpenDlg->FileName = edtSec->Text;
      if (OpenDlg->Execute())
          edtSec->Text = OpenDlg->FileName;
  }
  else
  {
      SaveDlg->Filter = "Private keyring files (*.skr;*.prvkr;*.pgp)|*.skr;*.prvkr;*.pgp|All files(*.*)|*.*";
      SaveDlg->FilterIndex = 1;
      SaveDlg->DefaultExt = ".skr";
      SaveDlg->Title = "Select private keyring file";
      SaveDlg->FileName = edtSec->Text;
      if (SaveDlg->Execute())
          edtSec->Text = SaveDlg->FileName;
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -