delphi 数字签名添加器源码 pdf添加数字签名

unit uMain;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

SelFile: TOpenDialog;

EFile1: TEdit;

Label1: TLabel;

Label2: TLabel;

EFile2: TEdit;

Button2: TButton;

Button3: TButton;

Button4: TButton;

CBbakFile: TCheckBox;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure ShowMessBox(pvCaptiong, pvText: string);

begin

MessageBox(Form1.Handle, PAnsiChar(pvText), PAnsiChar(pvCaptiong), 0);

end;

function ReadHexDZ(fvFileName:string; fvHexDZ:Integer):Integer; //读取指定偏移地址十六进制数据

var

//vBuffer : array of byte; //没指定长度的话调用函数回出错

vBuffer : array [0..3] of byte; //指定长度

vInt : integer;

vFS : TFileStream;

vStr : string;

begin

Result := -1 ;

vStr:= '';

try

vFS:= TFileStream.Create(fvFileName, fmOpenRead); //以读取方式打开

vFS.Position:= fvHexDZ; //设置开始位置

vFS.ReadBuffer(vBuffer, SizeOf(vBuffer)); //读取数据到缓冲区

for vInt:=0 to 3 do

vStr:=IntToHex(vBuffer[vInt], 2) + vStr; //得到16进制

Result:= StrToInt('$'+vStr) ;

except

Result := -1

END;

vFS.Free;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Self.Close;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

SelFile.Title := '请选择含有数字签名的文件';

if not SelFile.Execute then Exit;

EFile1.Text := Selfile.FileName;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

SelFile.Title := '请选择要添加数字签名的文件';

if not SelFile.Execute then Exit;

EFile2.Text := Selfile.FileName;

end;

procedure TForm1.Button4Click(Sender: TObject);

var

vFile1, vFile2: string;

vBuf1,vBuf2: array [0..3] of Byte;

vFS: TFileStream;

vBufAttr: array [0..100000] of PAnsiChar ;

vFile2SZQMDZ,

vFile1SZQMDZ, //指定数字签名的地址

vFile1SZQMSizeDZ, //指定数字签名大小

vSZQMDZ, //数字签名地址

vBufSize:integer;//数字签名大小

vStr, vNewStr, vNewStr2:string;

vInt: Integer;

begin

vFile1:= Trim(EFile1.Text);

vFile2 := Trim(EFile2.Text);

if not FileExists(vFile1) or not FileExists(vFile2) then

begin

ShowMessBox('消息', '找不到文件!');

Exit;

end;
delphi 数字签名添加器源码 pdf添加数字签名

if CBbakFile.Checked then

CopyFile(PAnsiChar(vFile2), PAnsiChar(ExtractFileName(vFile2)+'.bak'), False);

vFile1SZQMDZ:= ReadHexDZ(vFile1, $3C) + $98 ; //数字签名地址

vFile1SZQMSizeDZ := vFile1SZQMDZ +$4; //数字签名大小地址

vSZQMDZ:= ReadHexDZ(vFile1, vFile1SZQMDZ); //数字签名开始位置

vBufSize := ReadHexDZ(vFile1, vFile1SZQMSizeDZ) ;

//ShowMessBox(IntToStr(vFile1SZQMSizeDZ), IntToStr(vBufSize));

// exit;

try

vFS := TFileStream.Create(vFile1, fmOpenRead);

try

vFS.Position:= vFile1SZQMDZ;

vFS.ReadBuffer(vBuf1, 4); //得到记录数字签名所在地的缓冲区

vFS.Position:= vFile1SZQMSizeDZ;

vFS.ReadBuffer(vBuf2, 4); //得到记录数字签名大小的缓冲区

vFS.Position:= vSZQMDZ;

vFS.ReadBuffer(vBufAttr, vBufSize); //读取数字签名数据到vbufattr

finally

vFS.Free;

end;

vFile2SZQMDZ := ReadHexDZ(vFile2, $3C) + $98;

vFS := TFileStream.Create(vFile2, fmOpenReadWrite);

try

vFS.Position:= vFile2SZQMDZ;

vStr:= IntToHex(vFS.Size, 8);

vNewStr:= Copy(vStr, 7, 2) ;

vNewStr:= vNewStr + Copy(vStr, 5, 2) ;

vNewStr:= vNewStr + Copy(vStr, 3, 2) ;

vNewStr:= vNewStr + Copy(vStr, 1, 2) ;

vNewStr2:= '';

for vInt:=1 to (length(vNewStr) div 2) do

vNewStr2:=vNewStr2+char(strtoint('$'+copy(vNewStr,(vInt-1)*2+1,2)));

vFS.WriteBuffer(Pointer(vNewStr2)^, 4); //写入数据指定数字签名所在地

vFS.Position := vFile2SZQMDZ + $4;

vFS.WriteBuffer(vbuf2, SizeOf(vBuf2)); //写入数据指定数字签名大小

vFS.Position:= vFS.Size;

vFS.WriteBuffer(vBufAttr, vBufSize);

finally

vFS.Free;

end;

ShowMessBox('消息','添加数字签名成功');

except

ShowMessBox('坏消息','添加数字签名出错');

end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action:= caFree;

end;

end.

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/191917.html

更多阅读

pdf转换器怎么用 pdf转换成word

?  很多pdf转换成word转换器在实现pdf和word两者之间的转换的时候,对于pdf文件之内的图片、文字样式、超链接等一系列的内容的识别能力都并不完美。一般来说,转换能力较差的转换器软件转换之后,在word文件之内经常会出现各种排版上

股票公式全解析:16 股票软件源码引入

股票公式全解析:[16]股票软件源码引入——简介我们上一篇文章主要说明了大智慧的源码引入的基本方法,大家在使用这个源码的时候一定要注意具体的设置,按照我的要求一步一步实现,源码的编写我会专门有一个介绍,现在我继续说明其他股票软件

易语言进度条源码 精易论坛

易语言进度条源码——简介今天,我给大家带来如何弄进度条!易语言进度条源码——工具/原料电脑易语言易语言进度条源码——方法/步骤易语言进度条源码 1、打开易语言!拉

声明:《delphi 数字签名添加器源码 pdf添加数字签名》为网友感受浅蓝的淡然分享!如侵犯到您的合法权益请联系我们删除