• 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协议,使用灵活、速度快捷。
  • 相关阅读:
    PHP+MySQL
    Appstore排名前十的程序员应用软件
    架构师的平凡之路
    程序员,如何三十而立?
    不懂技术也可以轻松开发一款APP
    php语法学习:轻松看懂PHP语言
    你真的了解软件测试行业吗?
    十个程序员必备的网站推荐
    从更高点看软件开发的侧重点
    php如何实现文件下载
  • 原文地址:https://www.cnblogs.com/jackkwok/p/12761252.html
Copyright © 2020-2023  润新知