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

📄 mainform.pas

📁 著名的SecureBlackBox控件完整源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      SetLength(OutBuf, Sz);
      Cursor := crHourGlass;
      I := ElMessageEncryptor1.Encrypt(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
      if I = 0 then
      begin
        SetLength(OutBuf, Sz);
        AssignFile(F, Edit2.Text);
        Rewrite(F, 1);
        BlockWrite(F, OutBuf[0], Sz);
        CloseFile(F);
        Label8.Caption := 'The operation was completed successfully';
      end
      else
        Label8.Caption := 'Error #' + IntToHex(I, 4) + ' occured while encrypting';
      Cursor := crDefault;
      PageControl1.ActivePageIndex := 5;
    end;
  end;
end;

procedure TForm1.Sign(Step : integer);
var
  InBuf, OutBuf : array of byte;
  F : file;
  Sz : integer;
  I : integer;
begin
  Button3.Enabled := true;
  Button4.Enabled := true;
  case Step of
    STEP_SELECT_SIGNATURE_TYPE:
    begin
      PageControl1.ActivePageIndex := 8;
    end;
    STEP_SELECT_CERTIFICATES :
    begin
      while ElMemoryCertStorage1.Count > 0 do
        ElMemoryCertStorage1.Remove(0);
      ListBox1.Clear;
      LabelSelectCertificates.Caption := SSelectCertificatesForSigning;
      PageControl1.ActivePageIndex := 1;
    end;
    STEP_SELECT_ALGORITHM :
    begin
      PageControl1.ActivePageIndex := 6;
      RadioButton11.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
      RadioButton12.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
      RadioButton13.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
      RadioButton14.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
      RadioButton15.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
      RadioButton18.Enabled := ElMessageSigner1.SignatureType = mstMAC;
      if ElMessageSigner1.SignatureType = mstMAC then
        RadioButton18.Checked := true
      else
        RadioButton11.Checked := true;
    end;
    STEP_SELECT_FILES :
    begin
      Edit1.Text := '';
      Edit2.Text := '';
      LabelSelectFiles.Caption := SSelectFilesForSigning;
      PageControl1.ActivePageIndex := 3;
    end;
    STEP_CHECK_DATA :
    begin
      Memo1.Lines.Clear;
      LabelInfo.Caption := SInfoSigning;
      ButtonDoIt.Caption := 'Sign';
      if ElMessageSigner1.SignatureType = mstPublicKey then
        Memo1.Lines.Add('Signature type: PUBLIC-KEY')
      else
        Memo1.Lines.Add('Signature type: MAC');
      ElMessageSigner1.RecipientCerts := ElMemoryCertStorage1;
      Memo1.Lines.Add('File to sign: ' + Edit1.Text + #13#10);
      Memo1.Lines.Add('File to write signed data: ' + Edit2.Text);
      Memo1.Lines.Add('');
      Memo1.Lines.Add('Certificates: ');
      Memo1.Lines.Text := Memo1.Lines.Text + WriteCertificateInfo(ElMemoryCertStorage1);
      Memo1.Lines.Add('Algorithm: ' + GetAlgorithmName(ElMessageSigner1.HashAlgorithm));
      PageControl1.ActivePageIndex := 4;
      Button4.Enabled := false;
    end;
    STEP_PROCESS :
    begin
      AssignFile(F, Edit1.Text);
      Reset(F, 1);
      SetLength(InBuf, FileSize(F));
      BlockRead(F, InBuf[0], Length(InBuf));
      CloseFile(F);
      Sz := 0;
      Button3.Enabled := false;
      Button4.Enabled := false;
      Button5.Caption := 'Finish';
      Button5.Default := true;
      ElMessageSigner1.Sign(@InBuf[0], Length(InBuf), nil, Sz);
      SetLength(OutBuf, Sz);
      Cursor := crHourGlass;
      I := ElMessageSigner1.Sign(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
      if I = 0 then
      begin
        SetLength(OutBuf, Sz);
        AssignFile(F, Edit2.Text);
        Rewrite(F, 1);
        BlockWrite(F, OutBuf[0], Sz);
        CloseFile(F);
        Label8.Caption := 'The operation was completed successfully';
      end
      else
        Label8.Caption := 'Error #' + IntToHex(I, 4) + ' occured while signing';
      Cursor := crDefault;
      PageControl1.ActivePageIndex := 5;
    end;
  end;
end;

procedure TForm1.Decrypt(Step : integer);
var
  InBuf, OutBuf : array of byte;
  F : file;
  Sz : integer;
  I : integer;
begin
  Button3.Enabled := true;
  Button4.Enabled := true;
  case Step of
    STEP_SELECT_CERTIFICATES :
    begin
      while ElMemoryCertStorage1.Count > 0 do
        ElMemoryCertStorage1.Remove(0);
      ListBox1.Clear;
      LabelSelectCertificates.Caption := SSelectCertificatesForDecryption;
      PageControl1.ActivePageIndex := 1;
    end;
    STEP_SELECT_FILES :
    begin
      Edit1.Text := '';
      Edit2.Text := '';
      LabelSelectFiles.Caption := SSelectFilesForDecryption;
      PageControl1.ActivePageIndex := 3;
    end;
    STEP_CHECK_DATA :
    begin
      Memo1.Lines.Clear;
      LabelInfo.Caption := SInfoDecryption;
      ButtonDoIt.Caption := 'Decrypt';
      Memo1.Lines.Add('File to decrypt: ' + Edit1.Text + #13#10);
      Memo1.Lines.Add('File to write decrypted data: ' + Edit2.Text);
      Memo1.Lines.Add('');
      Memo1.Lines.Add('Certificates: ');
      Memo1.Lines.Text := Memo1.Lines.Text + WriteCertificateInfo(ElMemoryCertStorage1);
      PageControl1.ActivePageIndex := 4;
      Button4.Enabled := false;
    end;
    STEP_PROCESS :
    begin
      AssignFile(F, Edit1.Text);
      Reset(F, 1);
      SetLength(InBuf, FileSize(F));
      BlockRead(F, InBuf[0], Length(InBuf));
      CloseFile(F);
      Sz := 0;
      Button3.Enabled := false;
      Button4.Enabled := false;
      Button5.Default := true;
      ElMessageDecryptor1.Decrypt(@InBuf[0], Length(InBuf), nil, Sz);
      SetLength(OutBuf, Sz);
      Cursor := crHourGlass;
      I := ElMessageDecryptor1.Decrypt(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
      Button5.Caption := 'Finish';
      Label20.Caption := 'Decryption results';
      Memo4.Lines.Clear;
      if I = 0 then
      begin
        Memo4.Lines.Add('Successfully decrypted');
        Memo4.Lines.Add('Algorithm: ' + GetAlgorithmName(ElMessageDecryptor1.Algorithm));
        SetLength(OutBuf, Sz);
        AssignFile(F, Edit2.Text);
        Rewrite(F, 1);
        BlockWrite(F, OutBuf[0], Sz);
        CloseFile(F);
      end
      else
        Memo4.Lines.Add('Decryption failed with error #' + IntToHex(I, 4));
      Cursor := crDefault;
      PageControl1.ActivePageIndex := 7;
    end;
  end;
end;

procedure TForm1.Verify(Step : integer);
var
  InBuf, OutBuf : array of byte;
  F : file;
  Sz : integer;
  I : integer;
begin
  Button3.Enabled := true;
  Button4.Enabled := true;
  case Step of
    STEP_SELECT_CERTIFICATES :
    begin
      while ElMemoryCertStorage1.Count > 0 do
        ElMemoryCertStorage1.Remove(0);
      ListBox1.Clear;
      LabelSelectCertificates.Caption := SSelectCertificatesForVerifying;
      PageControl1.ActivePageIndex := 1;
    end;
    STEP_SELECT_FILES :
    begin
      Edit1.Text := '';
      Edit2.Text := '';
      LabelSelectFiles.Caption := SSelectFilesForVerifying;
      PageControl1.ActivePageIndex := 3;
    end;
    STEP_CHECK_DATA :
    begin
      Memo1.Lines.Clear;
      LabelInfo.Caption := SInfoVerifying;
      ButtonDoIt.Caption := 'Verify';
      Memo1.Lines.Add('File to verify: ' + Edit1.Text + #13#10);
      Memo1.Lines.Add('File to write verified data: ' + Edit2.Text);
      Memo1.Lines.Add('');
      Memo1.Lines.Add('Certificates: ');
      Memo1.Lines.Text := Memo1.Lines.Text + WriteCertificateInfo(ElMemoryCertStorage1);
      PageControl1.ActivePageIndex := 4;
      Button4.Enabled := false;
    end;
    STEP_PROCESS :
    begin
      AssignFile(F, Edit1.Text);
      Reset(F, 1);
      SetLength(InBuf, FileSize(F));
      BlockRead(F, InBuf[0], Length(InBuf));
      CloseFile(F);
      Sz := 0;
      Button3.Enabled := false;
      Button4.Enabled := false;
      Button5.Caption := 'Finish';
      Button5.Default := true;
      ElMessageVerifier1.Verify(@InBuf[0], Length(InBuf), nil, Sz);
      SetLength(OutBuf, Sz);
      Cursor := crHourGlass;
      I := ElMessageVerifier1.Verify(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
      Label20.Caption := 'Verifying results';
      Memo4.Lines.Clear;
      if I = 0 then
      begin
        Memo4.Lines.Add('Successfully verified!');
        Memo4.Lines.Add('');
        if ElMessageVerifier1.SignatureType = mstPublicKey then
        begin
          Memo4.Lines.Add('Signature type: PUBLIC KEY');
          Memo4.Lines.Add('');
        end
        else
        begin
          Memo4.Lines.Add('Signature type: MAC');
          Memo4.Lines.Add('');
          Memo4.Lines.Add('MAC algorithm: ' + GetAlgorithmName(ElMessageVerifier1.MacAlgorithm));
        end;
        Memo4.Lines.Add('Hash Algorithm: ' + GetAlgorithmName(ElMessageVerifier1.HashAlgorithm));
        Memo4.Lines.Add('');
        Memo4.Lines.Add('Certificates contained in message:');
        Memo4.Lines.Add(WriteCertificateInfo(ElMessageVerifier1.Certificates));
        SetLength(OutBuf, Sz);
        AssignFile(F, Edit2.Text);
        Rewrite(F, 1);
        BlockWrite(F, OutBuf[0], Sz);
        CloseFile(F);
      end
      else
        Memo4.Lines.Add('Verification failed with error #' + IntToHex(I, 4));
      Cursor := crDefault;
      PageControl1.ActivePageIndex := 7;
    end;
  end;
end;

procedure TForm1.RefreshCertificateListbox;
var
  I : integer;
begin
  ListBox1.Clear;
  for I := 0 to ElMemoryCertStorage1.Count - 1 do
    ListBox1.Items.Add(ElMemoryCertStorage1.Certificates[I].SubjectName.CommonName);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >= 0 then
  begin
    ElMemoryCertStorage1.Remove(ListBox1.ItemIndex);
    RefreshCertificateListbox;
  end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  OpenDialog1.Title := 'Select input file';
  OpenDialog1.Filter := 'All files (*.*)|*.*';
  if OpenDialog1.Execute then
    Edit1.Text := OpenDialog1.Filename;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  SaveDialog1.Title := 'Select output file';
  SaveDialog1.Filter := 'All files (*.*)|*.*';
  if SaveDialog1.Execute then
    Edit2.Text := SaveDialog1.Filename;
end;

function TForm1.WriteCertificateInfo(Storage : TElCustomCertStorage) : string;
var
  I : integer;
  Cert : TElX509Certificate;
  Sz : word;
begin
  for I := 0 to Storage.Count - 1 do
  begin
    Cert := Storage.Certificates[I];
    Result := Result + 'Certificate #' + IntToStr(I + 1) + ':'#13#10;
    Result := Result + 'Issuer: C=' + Cert.IssuerName.Country + ', L=' +
      Cert.IssuerName.Locality + ', O=' + Cert.IssuerName.Organization + ', CN=' +
      Cert.IssuerName.CommonName + #13#10;
    Result := Result + 'Subject: C=' + Cert.SubjectName.Country + ', L=' +
      Cert.SubjectName.Locality + ', O=' + Cert.SubjectName.Organization + ', CN=' +
      Cert.SubjectName.CommonName + #13#10;
    Sz := 0;
    Cert.SaveKeyToBuffer(nil, Sz);
    if Sz > 0 then
      Result := Result + 'Private key available'#13#10#13#10
    else
      Result := Result + 'Private key is not available'#13#10#13#10;
  end;
end;

function TForm1.GetAlgorithmName(AlgId : integer) : string;
begin
  case AlgId of
    SB_ALGORITHM_CNT_3DES : Result := 'Triple DES';
    SB_ALGORITHM_CNT_RC4 : Result := 'RC4';
    SB_ALGORITHM_CNT_RC2 : Result := 'RC2';
    SB_ALGORITHM_CNT_AES128 : Result := 'AES128';
    SB_ALGORITHM_CNT_AES256 : Result := 'AES256';
    SB_ALGORITHM_DGST_MD5 : Result := 'MD5';
    SB_ALGORITHM_DGST_SHA1 : Result := 'SHA1';
    SB_ALGORITHM_DGST_SHA256 : Result := 'SHA256';
    SB_ALGORITHM_DGST_SHA384 : Result := 'SHA384';
    SB_ALGORITHM_DGST_SHA512 : Result := 'SHA512';
    SB_ALGORITHM_MAC_HMACSHA1 : Result := 'HMAC-SHA1';
  else
    Result := 'Unknown';
  end;
end;

procedure TForm1.ButtonDoItClick(Sender: TObject);
begin
  if Operation = OPERATION_ENCRYPTION then
    Encrypt(STEP_PROCESS)
  else if Operation = OPERATION_SIGNING then
    Sign(STEP_PROCESS)
  else if Operation = OPERATION_DECRYPTION then
    Decrypt(STEP_PROCESS)
  else if Operation = OPERATION_VERIFYING then
    Verify(STEP_PROCESS);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if PageControl1.ActivePageIndex = 1 then
  begin
    if Operation = OPERATION_SIGNING then
      PageControl1.ActivePageIndex := 8
    else
    begin
      PageControl1.ActivePageIndex := 0;
      Button3.Enabled := false;
    end;
  end
  else if PageControl1.ActivePageIndex = 8 then
  begin
    PageControl1.ActivePageIndex := 0;
    Button3.Enabled := false;
  end
  else if (PageControl1.ActivePageIndex = 2) or (PageControl1.ActivePageIndex = 6) then
    PageControl1.ActivePageIndex := 1
  else if PageControl1.ActivePageIndex = 3 then
  begin
    if Operation = OPERATION_ENCRYPTION then
      PageControl1.ActivePageIndex := 2
    else if (Operation = OPERATION_DECRYPTION) or (Operation = OPERATION_VERIFYING) then
      PageControl1.ActivePageIndex := 1
    else if (Operation = OPERATION_SIGNING) then
      PageControl1.ActivePageIndex := 6;
  end
  else if PageControl1.ActivePageIndex = 4 then
  begin
    PageControl1.ActivePageIndex := 3;
    Button4.Enabled := true;
  end
end;


initialization
SetLicenseKey('ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76' + 
  'FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C' + 
  'F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47' + 
  '5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9' + 
  'F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A' + 
  '8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43' + 
  'DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8' + 
  'BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F');

end.

⌨️ 快捷键说明

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