delphi与python混合编程实现数据加密

1,缘起

某个项目需要实现数据加密上传,主程序拟采用delphi7实现,其中的数据加密采用RSA,Cipher_pkcs1_v1_5加密。

该加密在python中容易实现,且已经有现成的加密函数。

如果在delphi中重新实现该算法,由于无现成的库可用,需要自己编写,比较麻烦且结果不一定正确。

因此,delphi程序如何能借用已有的python算法成为一个现实问题。

2,思路

首先,python源码在现场运行不现实,因为在现场电脑上安装python运行环境会面临不确定性。因此,首先否定运行python源码的想法。

其次,采用 python4delphi?感觉不好,存在隐患:涉及Python版本、P4D版本,Python依赖库、unicode等。对当前delphi IDE环境也有破坏。

再次,既然不能运行python源码,那么能否将python源码编译为exe程序呢?答案是肯定的,采用pyinstaller就行。

因此,确定架构为delphi EXE程序(以下简称DE程序)调用Python EXE程序(以下简称PE程序)

3,DE与PE的调用方式

那么DE程序如何调用PE程序呢?

很明显的一种方式是 DE采用winExec函数,调用PE,传入待加密字符串,返回加密结果

但此法的缺点很明显,如

  • 每次加密均需调用运行释放PE一次,耗费时间
  • 不能同步返回结果,winExec启动PE程序后就返回,DE程序需要循环判断PE程序释放执行完成
  • 最关键的一点,winExec不能返回PE程序退出时的返回值

因此,很自然地想到采用UDP通信方式。好处也是显而易见的,

  • 调用关系明确,DE启动时自动启动PE,DE退出时自动关闭PE
  • 同步调用,响应及时。IdUDPClient1.Send后,IdUDPClient1.ReceiveString会阻塞,直到结果返回。

4,demo运行

下图中server.exe来源于server.py代码,由pyinstaller编译为windows EXE文件。

delphi程序请求加密,server.exe收到数据后将其加密后返回,delphi程序将密文显示在右侧列表框。

5,总结

  • 混合编程可以发挥多种语言的优势。已有的功能不妨多包装借用,省时省力且质量有保障。
  • 多程序间数据交换尽可能采用UDP、TCP协议,使用灵活、速度快捷。
原文地址:https://www.cnblogs.com/jackkwok/p/12761252.html