dll开发环境: Delphi XE 10.1 Berlin
exe开发环境: Delphi 6
前提文章: Delphi RSA加解密(一)
目录
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;
interface
uses
System.SysUtils, System.Classes, qaes, qstring, IdHashMessageDigest, IdHash;
type
TMD5= class(TIdHashMessageDigest5);
TAppPara = class
public
class function AppPath: string;
class function AppName: string;
end;
TFilePath = class(TAppPara)
public
class function IniFile: string;
end;
//写日志
procedure systemLog(Msg: AnsiString);
implementation
procedure systemLog(Msg: AnsiString);
var
F: TextFile;
FileName: string;
ExeRoad: string;
begin
try
ExeRoad := ExtractFilePath(ParamStr(0));
if ExeRoad[Length(ExeRoad)] = '\' then
SetLength(ExeRoad, Length(ExeRoad) - 1);
if not DirectoryExists(ExeRoad + 'log') then
begin
CreateDir(ExeRoad + '\log');
end;
FileName := ExeRoad + '\log\DLL_Log' + FormatDateTime('YYMMDD', NOW) + '.txt';
if not FileExists(FileName) then
begin
AssignFile(F, FileName);
ReWrite(F);
end
else
AssignFile(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;
begin
Result := ExtractFileName(ParamStr(0));
end;
class function TAppPara.AppPath: string;
begin
Result := ExtractFilePath(ParamStr(0));
end;
{ TFilePath }
class function TFilePath.IniFile: string;
begin
Result := AppPath + 'set.ini';
end;
end.
3.3 uInterface.pas单元代码
需要注意,由于D6版本低,此处参数使用PAnsiChar。
unit uInterface;
interface
uses
Winapi.Windows, System.SysUtils, System.Classes, EncdDecd, Qjson,
RSAOpenSSL;
var
FRSAOpenSSL : TRSAOpenSSL;
//----------------------------------测试部分------------------------------------
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//测试
function dll_test: Byte; stdcall;
function dll_chinese_test(sIn: AnsiString; var sOut: PAnsiChar): Byt

本文详细介绍了如何使用DelphiXE10.1Berlin封装DLL以实现RSA加解密功能,同时处理了与Delphi6主程序中libeay32.dll的兼容问题。通过提供接口,DLL可以被其他低版本的Delphi程序调用,进行不同类型的RSA加密操作。文章还提供了主程序模拟示例,展示了如何在VCL应用程序中使用这些加密接口。
最低0.47元/天 解锁文章
1513

被折叠的 条评论
为什么被折叠?



