keil调用python脚本实现对成的bin文件进行AES加密

4 篇文章 0 订阅
1 篇文章 0 订阅

起因

由于有些产品主控制器需要升级程序,升级程序的时候需要对bin文件进行加密,防止传输过程中消息被窃听。加密方式选择了AES。之前用QT写了加密程序和升级程序,

所以每次要先用keil生产bin文件,在对bin文件进行加密,然后在通过boot软件下载到单片机中,十分繁琐。所以为了解决这个不人性的繁琐的过程,写个脚本在编译后自动对bin

文件进行加密省去很繁琐的加密步骤。

过程

想法是挺好的,然鹅过程是崎岖的,python没用过所以属于现学现卖,AES加密过程有一堆例程这里不献丑了。核心思想就是运行脚本,查找当前文件夹下是否有bin文件,如果有则

载入bin文件,读取.ini中保存的配置文件中的aes key  (这里面有个坑 )然后对程序进行加密,然后另存为一个新的加密文件。之后如果需要升级可以将加密后的文件发送个用户自行升级即

可。

问题

然后现实就是在你以为so easy嘛 ,实际是啪个耳光打来,问题就出现了,如下图所示。

 

 将python脚本和bin文件放到一个文件夹下,aes.py为脚本。按照正常的套路keil编译完成后调用第一脚本生成bin文件,然后在调用第二个脚本生成加密文件。运行aes.bat没问题生成了加密

文件。如图所示。

 

这就尴尬了,没有找到bin文件,直接手动运行明明没有问题的,反复尝试多次多少这个结果,冷静下来开始一顿分析。

  1. python 脚本权限不够 手动点权限够 通过keil调用权限不够
  2. 系统对脚本有权限有限制
  3. 路径有问题

问题1

    通过提高keil权限 执行脚本然而并没有什么用,还是找不到文件

问题2

    通过将python脚本打包成exe文件 测试 结果还是手动运行没有问题,通过keil调用还是找不文件

问题3

    因为python程序中使用的是相对路径,怀疑是这个问题,将读取的文件路径改成绝对路径,再次编译,奇迹出现了,没有报NO  BIN FILE!然后在脚本目录中并没有出现加密后的文件

反复测试后还是没有报错,既然没有报错那就说明文件生产了,但是生成的目录有问题,所以使用了 Everything 小工具全局查找该文件。如下图所示。

 居然找到了,生产的加密文件被保存到了工程目录下。

 所以结论有了:

      keil在调用脚本时,是把脚本加载到工程目录,然后在工厂目录中运行,而python程序中使用的是相对地址,工程目录下没有bin文件

所以导致了找不到bin文件错误。把bin文件的目录改成绝对地址后,生成的加密文件被保存到了工程目录下也印证了我的猜想。

重点:所以keil调用脚本都是以工程所在目录为参考目录

解决

问题知道了就好解决了,修改python程序,运行python程序时传入两个参数,一个是bin文件的相对目录,一个是生成的加密文件的相对目录,这样问题就完美解决了!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值