完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
起因
由于有些产品主控制器需要升级程序,升级程序的时候需要对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文件,直接手动运行明明没有问题的,反复尝试多次多少这个结果,冷静下来开始一顿分析。
通过提高keil权限 执行脚本然而并没有什么用,还是找不到文件 问题2 通过将python脚本打包成exe文件 测试 结果还是手动运行没有问题,通过keil调用还是找不文件 问题3 因为python程序中使用的是相对路径,怀疑是这个问题,将读取的文件路径改成绝对路径,再次编译,奇迹出现了,没有报NO BIN FILE!然后在脚本目录中并没有出现加密后的文件 反复测试后还是没有报错,既然没有报错那就说明文件生产了,但是生成的目录有问题,所以使用了 Everything 小工具全局查找该文件。如下图所示。 居然找到了,生产的加密文件被保存到了工程目录下。 所以结论有了: keil在调用脚本时,是把脚本加载到工程目录,然后在工厂目录中运行,而python程序中使用的是相对地址,工程目录下没有bin文件 所以导致了找不到bin文件错误。把bin文件的目录改成绝对地址后,生成的加密文件被保存到了工程目录下也印证了我的猜想。 重点:所以keil调用脚本都是以工程所在目录为参考目录 解决 问题知道了就好解决了,修改python程序,运行python程序时传入两个参数,一个是bin文件的相对目录,一个是生成的加密文件的相对目录,这样问题就完美解决了! |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
3467 浏览 0 评论
3407 浏览 9 评论
3092 浏览 16 评论
3576 浏览 1 评论
9257 浏览 16 评论
1376浏览 3评论
698浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
703浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2453浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
2017浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-26 22:42 , Processed in 1.343275 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191