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

深圳东风大厦 网站建设flash如何做网站

深圳东风大厦 网站建设,flash如何做网站,WordPress面包屑主题,组建网站开发团队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.sczhlp.com/news/144562/

相关文章:

  • 定西市小企业网站建设如何销售网站开发
  • 网站建设详细的步骤有哪些提供商城网站制作
  • 建设网站的企业名称公司名字设计
  • 扬州建设银行网站wordpress创建分类目录
  • 用dede做网站去掉版权上海网站搭建公司
  • 阿里云的云服务器做网站用哪种带数据库的网站
  • 免费网站开发模板建站工具帝国
  • 昆明网站托管企业网页设计公司深圳
  • 济南网站优化推广公司中国电力建设集团有限公司网站
  • 深圳网站建设(信科网络)网站开发进度安排文档
  • 长沙百度做网站多少钱建设网站要多少费用
  • 网站建设策划书网页设计建设网站基础知识
  • 网站里怎样添加关键词怎样做办公用品销售网站
  • 建网站科技公司宝塔服务器官网
  • 四川省住房和城镇建设官方网站阿里云服务器使用教程
  • 敦煌网站销售员怎么做东莞网站建设制作软件
  • 建设企业营销型网站学广告设计的培训机构
  • 怎样在百度建网站青岛模板建站公司
  • 网站刷新代码阿里云免费企业邮箱申请
  • 扬州网站建设小程序2017网站备案
  • 邢台网站建设报价多少钱做网站的大公司
  • 网站创建桌面快捷方式杭州展示型网站建设
  • 张店网站建设您备案的网站名称没有关联性
  • 网站关键词seo推广公司哪家好如何做网站维护
  • 做网站和彩票的同步开奖怎么做网站链接网址怎么做
  • 可以免费做中考题的网站网站建设 加盟
  • 找网站做任务领q币营销推广活动
  • 品牌高端网站建设绿色简单网站
  • 智慧团建网站登录密码视觉创意网站
  • 培训网站建设学校动态ip建网站