当前位置: 首页 > news >正文

赵艳红网站建设规划免费网站建设模板

赵艳红网站建设规划,免费网站建设模板,注册一个公司需要几个人,网站建设招标公示dll开发环境: Delphi XE 10.1 Berlin exe开发环境: Delphi 6 前提文章: Delphi RSA加解密(一) 目录 1. 概述 2. 准备工作 2.1 下载DEMO程序 2.2 字符编码说明 3. Cryption.dll封装 3.1 接口概况 3.2 uPub.pas单元代码 3.3 uInterface.pas单元代码 3.4 特别注意 4. 主程序…

dll开发环境: Delphi XE 10.1 Berlin

exe开发环境: Delphi 6

前提文章: Delphi RSA加解密(一)

目录

1. 概述

2. 准备工作

        2.1 下载DEMO程序

        2.2 字符编码说明

3. Cryption.dll封装

        3.1 接口概况

        3.2 uPub.pas单元代码

        3.3 uInterface.pas单元代码

        3.4 特别注意

4. 主程序模拟

        4.1 程序目录结构说明

        4.2 建立VCL应用程序

        4.3 接口引入单元

        4.4 接口加密验证

5. 结语


1. 概述

        公司用D6来编写三方接口,当前做某银行转账接口,采用RSA算法。在上一篇文章Delphi RSA加解密(一)中在网上找到了解决方案。

        D6版本低了,所有只有采用XE 10.1来封装dll。当前加密算法基于opelSSL,则依赖"libeay32.dll", 由于HIS程序目录下已有该dll,担心替换libeay32.dll会影响相关功能,特进行了特殊处理。

2. 准备工作

        2.1 下载DEMO程序

        在前提文章中提到了大佬分享的Demo. 下载后会发现bin目录有libeay32.dll。 这个文件很关键,后来我调试中,我使用XE 10.1对应的libeay32.dll文件,加密是不成功的。 但使用Demo的libeay32.dll进行加解密是正常的。

        2.2 字符编码说明

        原Demo的Delphi版本不确定,至少是D2010以后,版本太多了。

        悲催的是,我只有XE 10.1,下了Demo后进行部分调整。

3. Cryption.dll封装

        3.1 接口概况

        该dll开发工具我使用Delphi XE 10.1 Berlin版本.

        新建一个静态DLL工程,将原Demo的三个单元RSAOpenSSL.pas、libeay32.pas、EncdDecd_suman.pas拷贝到当前rsa目录下. 并加入当前dll工程. 另新建一个uPub.pas公共单元,新建一个uInterface.pas单元。工程目录如下

        

        具体代码在后面,相信当前还在使用Delphi的,应该已能看懂的。

        3.2 uPub.pas单元代码

unit uPub;interfaceusesSystem.SysUtils, System.Classes, qaes, qstring, IdHashMessageDigest, IdHash;typeTMD5= class(TIdHashMessageDigest5);TAppPara = classpublicclass function AppPath: string;class function AppName: string;end;TFilePath = class(TAppPara)publicclass function IniFile: string;end;//写日志
procedure systemLog(Msg: AnsiString);implementationprocedure systemLog(Msg: AnsiString);
varF: TextFile;FileName: string;ExeRoad: string;
begintryExeRoad := ExtractFilePath(ParamStr(0));if ExeRoad[Length(ExeRoad)] = '\' thenSetLength(ExeRoad, Length(ExeRoad) - 1);if not DirectoryExists(ExeRoad + 'log') thenbeginCreateDir(ExeRoad + '\log');end;FileName := ExeRoad + '\log\DLL_Log' + FormatDateTime('YYMMDD', NOW) + '.txt';if not FileExists(FileName) thenbeginAssignFile(F, FileName);ReWrite(F);endelseAssignFile(F, FileName);Append(F);Writeln(F, FormatDateTime('HH:NN:SS.zzz ', Now) + Msg);CloseFile(F);except//可能在事务中调用,避免意外Exit;end;
end;{ TAppPara }class function TAppPara.AppName: string;
beginResult := ExtractFileName(ParamStr(0));
end;class function TAppPara.AppPath: string;
beginResult := ExtractFilePath(ParamStr(0));
end;{ TFilePath }class function TFilePath.IniFile: string;
beginResult := AppPath + 'set.ini';
end;end.

        3.3 uInterface.pas单元代码

        需要注意,由于D6版本低,此处参数使用PAnsiChar。

unit uInterface;interfaceusesWinapi.Windows, System.SysUtils, System.Classes, EncdDecd, Qjson,RSAOpenSSL;varFRSAOpenSSL : TRSAOpenSSL;//----------------------------------测试部分------------------------------------
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//测试
function dll_test: Byte; stdcall;function dll_chinese_test(sIn: AnsiString; var sOut: PAnsiChar): Byte; stdcall;//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//----------------------------------加密部分------------------------------------
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//RSA 加密 初始化
function dll_rsa_init(pubFile, priFile: PAnsiChar): Byte; stdcall;//RSA SHA1加密
function dll_sha1_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;//RSA SHA256加密
function dll_sha256_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;//RSA SHA512加密
function dll_sha512_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;//RSA SHA1WITHRSA 加密
function dll_sha1withrsa_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;//RSA SHA256WITHRSA 加密
function dll_sha256withrsa_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;//RSA SHA512WITHRSA 加密
function dll_sha512withrsa_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;//RSA 加密 释放
function dll_rsa_uninit: Byte; stdcall;//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<implementationuses uPub, qaes;//----------------------------------测试部分------------------------------------
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//测试
function dll_test: Byte; stdcall;
beginResult:= 1;
end;function dll_chinese_test(sIn: AnsiString; var sOut: PAnsiChar): Byte; stdcall;
beginresult:= 0;sOut:= PAnsiChar(sIn);Result:= 1;
end;//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//RSA 加密 初始化
function dll_rsa_init(pubFile, priFile: PAnsiChar): Byte; stdcall;
beginresult:= 0;if (not FileExists(priFile))or (not FileExists(pubFile)) thenExit;if not Assigned(FRSAOpenSSL) thenFRSAOpenSSL := TRSAOpenSSL.Create(AnsiString(pubFile), AnsiString(priFile));Result:= 1;
end;//RSA SHA1加密
function dll_sha1_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;
varsAnsiStr: AnsiString;sOut: AnsiString;
beginresult:= 0;sAnsiStr:= UTF8Encode(sIN);sOut:= FRSAOpenSSL.SHA1(sAnsiStr);pOut:= PAnsiChar(sOut);Result:= 1;
end;//RSA SHA256加密
function dll_sha256_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;
varsAnsiStr: AnsiString;sOut: AnsiString;
beginresult:= 0;sAnsiStr:= UTF8Encode(sIN);sOut:= FRSAOpenSSL.SHA256(sAnsiStr);pOut:= PAnsiChar(sOut);Result:= 1;
end;//RSA SHA512加密
function dll_sha512_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;
varsAnsiStr: AnsiString;sOut: AnsiString;
beginresult:= 0;sAnsiStr:= UTF8Encode(sIN);sOut:= FRSAOpenSSL.SHA512(sAnsiStr);pOut:= PAnsiChar(sOut);Result:= 1;
end;//RSA SHA1WITHRSA 加密
function dll_sha1withrsa_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;
varsAnsiStr: AnsiString;sOut: AnsiString;
beginresult:= 0;sAnsiStr:= UTF8Encode(sIn);sOut:= FRSAOpenSSL.SHA1_Sign_PK(sAnsiStr);pOut:= PAnsiChar(sOut);Result:= 1;
end;//RSA SHA256WITHRSA 加密
function dll_sha256withrsa_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;
varsAnsiStr: AnsiString;sOut: AnsiString;
beginresult:= 0;sAnsiStr:= UTF8Encode(sIn);sOut:= FRSAOpenSSL.SHA256_Sign_PK(sAnsiStr);pOut:= PAnsiChar(sOut);Result:= 1;
end;//RSA SHA512WITHRSA 加密
function dll_sha512withrsa_encrypt(sIn: PAnsiChar; var pOut: PAnsiChar): Byte; stdcall;
varsAnsiStr: AnsiString;sOut: AnsiString;
beginresult:= 0;sAnsiStr:= UTF8Encode(sIn);sOut:= FRSAOpenSSL.SHA512_Sign_PK(sAnsiStr);pOut:= PAnsiChar(sOut);Result:= 1;
end;//RSA 加密 释放
function dll_rsa_uninit: Byte; stdcall;
beginResult:= 0;if Assigned(FRSAOpenSSL) thenFreeAndNil(FRSAOpenSSL);Result:= 1;
end;//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<end.

        3.4 特别注意

        在第四章我提到了程序目录(原因请看4.1),而libeay32.pas单元的第1290行,这个里引入了libeay32.dll,但是在,在我当前设计的目录里,Cryption.dll是和libeay32.dll放在程序目录下的bin目录下,通过Demo程序调用的话,程序认定的目录其实是程序根目录,所以在这里必须特殊处理下,加入路劲:

constLIBEAY_DLL_NAME = 'bin\libeay32.dll';

        如果编写dll与主程序同一个目录,不担心加密的libeay32.dll影响的话,就放在程序目录下就可以了。

4. 主程序模拟

        注意: SHA1WITHRSA、SHA256WITHRSA、SHA512WITHRSA需要公私钥的支持.

        4.1 程序目录结构说明

        在文章开始部分,我已说明使用Demo的libeay32.dll可能与主程序原本的libeay32.dll冲突,所以,第三章封装的Cryptiond.dll和libeay32.dll,以及可能用到的公私钥文件,我一起放在程序的某个目录下。

        

bin目录如下所示

        

 

        4.2 建立VCL应用程序

        丢下控件,界面如图所示:

 主要是初始化时候,我指定了公私钥文件,就像Demo里窗体创建一样。

主窗体代码如下:

unit uFrmMain;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, EncdDecd;typeTForm2 = class(TForm)btn1: TButton;btn2: TButton;btn3: TButton;btn4: TButton;btn5: TButton;btn6: TButton;btn7: TButton;btn8: TButton;lbl1: TLabel;lbl2: TLabel;mmo_in: TMemo;mmo_out: TMemo;procedure btn1Click(Sender: TObject);procedure btn8Click(Sender: TObject);procedure btn2Click(Sender: TObject);procedure btn5Click(Sender: TObject);procedure btn3Click(Sender: TObject);procedure btn4Click(Sender: TObject);procedure btn6Click(Sender: TObject);procedure btn7Click(Sender: TObject);private{ Private declarations }public{ Public declarations }priFile: AnsiString;pubFile: AnsiString;end;varForm2: TForm2;iRet: Byte;implementationuses uCryption;{$R *.dfm}procedure TForm2.btn1Click(Sender: TObject);
beginiRet:= 0;pubFile:= 'bin\apprsakey.pub';priFile:= 'bin\apprsakey.pri';iRet:= dll_rsa_init(PChar(pubFile), PChar(priFile));if iRet<> 1 thenShowMessage('初始化失败!')
end;procedure TForm2.btn8Click(Sender: TObject);
beginiRet:= 0;iRet:= dll_rsa_uninit;if iRet= 1 thenShowMessage('释放成功!')elseShowMessage('释放失败!')
end;procedure TForm2.btn2Click(Sender: TObject);
varpOut: PChar;sIn: string;
beginsIn:= StringReplace(mmo_in.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);iRet:= 0;pOut:= nil;iRet:= dll_sha1_encrypt(PChar(sIn), pOut);if iRet=1 thenmmo_out.Lines.Add(pOut)elseShowMessage('dll_sha1_encrypt加密失败!');pOut:= nil;
end;procedure TForm2.btn5Click(Sender: TObject);
varpOut: PChar;sIn: string;
beginsIn:= StringReplace(mmo_in.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);iRet:= 0;pOut:= nil;iRet:= dll_sha1withrsa_encrypt(PChar(sIn), pOut);if iRet=1 thenmmo_out.Lines.Add(pOut)elseShowMessage('dll_sha1withrsa_encrypt加密失败!');pOut:= nil;
end;procedure TForm2.btn3Click(Sender: TObject);
varpOut: PChar;sIn: string;
beginsIn:= StringReplace(mmo_in.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);iRet:= 0;pOut:= nil;iRet:= dll_sha256_encrypt(PChar(sIn), pOut);if iRet=1 thenmmo_out.Lines.Add(pOut)elseShowMessage('dll_sha256_encrypt加密失败!');pOut:= nil;
end;procedure TForm2.btn4Click(Sender: TObject);
varpOut: PChar;sIn: string;
beginsIn:= StringReplace(mmo_in.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);iRet:= 0;pOut:= nil;iRet:= dll_sha512_encrypt(PChar(sIn), pOut);if iRet=1 thenmmo_out.Lines.Add(pOut)elseShowMessage('dll_sha512_encrypt加密失败!');pOut:= nil;
end;procedure TForm2.btn6Click(Sender: TObject);
varpOut: PChar;sIn: string;
beginsIn:= StringReplace(mmo_in.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);iRet:= 0;pOut:= nil;iRet:= dll_sha256withrsa_encrypt(PChar(sIn), pOut);if iRet=1 thenmmo_out.Lines.Add(pOut)elseShowMessage('dll_sha256withrsa_encrypt加密失败!');pOut:= nil;
end;procedure TForm2.btn7Click(Sender: TObject);
varpOut: PChar;sIn: string;
beginsIn:= StringReplace(mmo_in.Lines.Text,#13#10,'',[rfIgnoreCase,rfReplaceAll]);iRet:= 0;pOut:= nil;iRet:= dll_sha512withrsa_encrypt(PChar(sIn), pOut);if iRet=1 thenmmo_out.Lines.Add(pOut)elseShowMessage('dll_sha512withrsa_encrypt加密失败!');pOut:= nil;
end;end.

        4.3 接口引入单元

        需要注意dllName是按目录指定dll位置.

unit uCryption;interfaceusesClasses;constdllName= 'bin\Cryption.dll';function dll_chinese_test(sIn: AnsiString; var sOut: PAnsiChar): Byte; stdcall; external dllName;//RSA 加密 初始化function dll_rsa_init(pubFile, priFile: PChar): Byte; stdcall; external dllName;//RSA SHA1加密function dll_sha1_encrypt(sIn: PChar; var pOut: PChar): Byte; stdcall; external dllName;//RSA SHA256加密function dll_sha256_encrypt(sIn: PChar; var pOut: PChar): Byte; stdcall; external dllName;//RSA SHA512加密function dll_sha512_encrypt(sIn: PChar; var pOut: PChar): Byte; stdcall; external dllName;//RSA SHA1WITHRSA 加密function dll_sha1withrsa_encrypt(sIn: PChar; var pOut: PChar): Byte; stdcall; external dllName;//RSA SHA256WITHRSA 加密function dll_sha256withrsa_encrypt(sIn: PChar; var pOut: PChar): Byte; stdcall; external dllName;//RSA SHA512WITHRSA 加密function dll_sha512withrsa_encrypt(sIn: PChar; var pOut: PChar): Byte; stdcall; external dllName;//RSA 加密 释放function dll_rsa_uninit: Byte; stdcall; external dllName;implementationend.

        4.4 接口加密验证

        在线SHA1 SHA-1在线加密工具 与Demo加密对比

        

 

        在线SHA256 sha256在线解密 在线加密 与Demo加密对比

        

 

        在线SHA512可验证 sha512在线解密 在线加密 与Demo加密对比

        另 SHA1WITHRSA、SHA256WITHRSA、SHA512WITHRSA在线验证不好找

        后面我本地写个对照下看看,后面补充.

5. 结语

        仅供参考。

       

http://www.mnyf.cn/news/46503.html

相关文章:

  • 做网站平台的公司有哪些网站推广软件免费观看
  • 西安制作手机网站软文文案
  • 武汉网站建设的公司哪家好新品上市的营销方案
  • 如何申请免费网站百度应用下载
  • 网站定制的公司哪家好北京seo教师
  • 枣庄公司做网站seo文章外包
  • 天津北京网站建设陕西网站设计
  • 北京网站建设好吗网站推广常用的方法
  • 宁波网站门户设计上海网络推广联盟
  • 建设手机网站哪个平台比较好百度大盘指数
  • 徐州建设工程材料检测预约网站百度首页排名优化平台
  • wordpress建电影网站app推广软件有哪些
  • 北京智能网站建设哪里好免费视频网站推广软件
  • 网页与网站的关系搜索引擎营销
  • 做时时彩网站微信平台有哪些成都网站快速开发
  • 2021世界500强企业排名佛山做网络优化的公司
  • 毕业设计做网站做什么好如何制作网页游戏
  • 免费企业黄页网站网址推手平台哪个靠谱
  • 宁波建设商城网站郑州优化网站关键词
  • asp.net 建立网站windows优化大师是什么
  • 台州企业网站制作公司外贸建站网站推广
  • 徐州建设工程交易信息网衡阳seo优化推荐
  • 云网站注册b2b免费发布平台
  • 制作网站用什么代码最新新闻热点事件及评论
  • 帮妈妈做家务作文网站免费推广渠道有哪些
  • 网站制作公司 佛山重庆seo网站
  • 定制网站建设加盟代理免费发布推广信息网站
  • 网站更换空间教程sem竞价托管公司
  • 东莞建站方案手机百度账号申请注册
  • 网站用哪些系统做的好处关键词优化怎么做