delphi 数字签名添加器源码 pdf添加数字签名
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;
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.
更多阅读
pdf转换器怎么用 pdf转换成word
? 很多pdf转换成word转换器在实现pdf和word两者之间的转换的时候,对于pdf文件之内的图片、文字样式、超链接等一系列的内容的识别能力都并不完美。一般来说,转换能力较差的转换器软件转换之后,在word文件之内经常会出现各种排版上
股票公式全解析:16 股票软件源码引入
股票公式全解析:[16]股票软件源码引入——简介我们上一篇文章主要说明了大智慧的源码引入的基本方法,大家在使用这个源码的时候一定要注意具体的设置,按照我的要求一步一步实现,源码的编写我会专门有一个介绍,现在我继续说明其他股票软件
易语言进度条源码 精易论坛
易语言进度条源码——简介今天,我给大家带来如何弄进度条!易语言进度条源码——工具/原料电脑易语言易语言进度条源码——方法/步骤易语言进度条源码 1、打开易语言!拉
绝对比美黑马赢家的黑马营通达信主图、双核及系列选股公式源码 宜兴环保黑马营
1、回马枪B公式源码:当日成本:=IF(C>REF(C,1),(3*H+4*C+3*OPEN+2*L)/12,(2*H+4*C+3*OPEN+3*L)/12);疯牛线:=EXPMEMA(当日成本,3);龙头线:=EXPMEMA(当日成本,8);慢牛线:=EXPMEMA(当日成本,25);生命线:=EXPMEMA(当日成本,79);牛熊线:=
windows中下载android源码 android系统源码下载
由于ubuntu出现问题了,repogit下载android总是出现问题,因此寻求在windows下下砸android的源码1. 进入http://code.google.com/p/msysgit/下载最新的Git-1.7.0.2-pr