zoukankan      html  css  js  c++  java
  • 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协议,使用灵活、速度快捷。
  • 相关阅读:
    python爬虫实例——爬取歌单
    第一次接触稍大一点的项目有感——规范
    Ajax学习——ajax提交目的是返回刷新页面某个位置的内容
    C++ STL(标准模板库)的学习了解
    各高级编程语言分类分析
    ubuntu安装后中出现如下启动报错的错误
    解决GitHub下载慢的问题
    caffe的CPU编译需要更改的地方
    拐点处选择聚类K值
    python处理大规模数据时,出现memory
  • 原文地址:https://www.cnblogs.com/jackkwok/p/12761252.html
Copyright © 2011-2022 走看看