Python开发日记 -- 实现bin文件的签名

目录

1.数据的不同表现形式签名值不一样?

2.Binascii模块简介

3.问题定位

4.问题总结


1.数据的不同表现形式签名值不一样?

Happy Muscle试运行了一段时间,组内同事再一次提出了新的需求:需要对bin文件签名。

PS:服了,你把bin导成asc文件再签名不行吗?

不过,内部客户也是客户,就是上帝,还是抓点紧,继续完善工具。

这个思路还是很明确:拖转bin文件到输入框,显示路径供用户检查;后台根据路径识别bin文件,解析成算法所需格式,最终完成签名。

前几步还是非常简单,问题出在解析bin文件转为算法所需格式上,现象如下:

将bin文件解析为算法所需格式并打印出来,完全木有问题呀(上图红框),为啥这个签名值不对头呢?

  • Openssl 签名值: 
  • HappyMuscle对原始数据签名:

  • HappyMuscle解析bin后的签名:

 那问题就出在了对原始数据和bin文件的解析上,来看代码:

if self.rb_rsa_genkey_2.isChecked() :
   filepath = self.te_rsa_plaintext.toPlainText()[8:]
   binfile = open(filepath,'rb').read()
   asymobjcal.rsa_pt = binascii.b2a_hex(binfile)
else:
   asymobjcal.rsa_pt = binascii.unhexlify(self.te_rsa_plaintext.toPlainText().strip().replace('\n','').replace('0x', '').replace(',','').replace(' ',''))

2.Binascii模块简介

这里用到了binascii模块,该模块包含许多在二进制和各种ascii编码的二进制表示之间进行转换的方法,常见方法总结如下:

  • binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])

将二进制数据转为十六进制的表现形式,如下:

>>> binascii.b2a_hex(b'\xb9\x01\xef')
b'b901ef'

sep可以是单个符合或者字节对象,如果配置了,就会在步长(bytes_per_sep)后加入符号,如下:

>>> binascii.hexlify(b'\xb9\x01\xef', '-')
b'b9-01-ef'
>>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2)
b'b9_01ef'
>>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2)
b'b901 ef'

 方法hexlify(data[, sep[, bytes_per_sep=1]]),有同样的效果。

  • binascii.a2b_hex(hexstr)

很明显,这个就是返回十六进制字符串hexstr表示的二进制数据,就是b2a_hex()的逆向,返回的是data。

  • binascii.crc32(data[, value])

用于计算data的CRC-32的校验和,如下:

print(binascii.crc32(b"hello world"))
# Or, in two pieces:
crc = binascii.crc32(b"hello")
crc = binascii.crc32(b" world", crc)
print('crc32 = {:#010x}'.format(crc))

在给文件或者数据签名时, 所需要的数据类型为bytes,

那么问题就很好定位了。

3.问题定位

在代码实现里,如果是以bin的形式加载进来,我是先读取文件再转为调用b2a_hex,打印出来:b'0008022079.....',类型为byte,然后再去签名,

但在这个时候我们来查看rsa_pt的类型:

 字节长度居然来到了4880,再回过头看文档,这句话非常关键:

Return the hexadecimal representation of the binary data. Every byte of data is converted into the corresponding 2-digit hex representation. The returned bytes object is therefore twice as long as the length of data.

转为十六进制表现形式长度为原来的两倍!!!

回过头来,既然我都可以调用b2a_hex(),那说明现在binfile类型本身就是byte,我们debug来看下:

这个字节长度就是没问题的,直接将这个文件读取在送入签名就可以了,解决如下:

asymobjcal.rsa_pt = open(filepath,'rb').read()

最终完成签名:

4.问题总结

这个问题归根结底还是在于自己对于模块各种方法的返回类型不够了解,在使用python时基本都是边写边查,也没有仔细看官方文档。

通过解决这个小问题,Happy Muscle功能进一步增强,就酱!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901172.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用代码编辑组件的npm包

使用代码编辑组件的npm包 文章说明核心代码运行截图源码下载 文章说明 我将书写的代码编辑组件打包为npm包,下载即可使用,目前是1.0.4版本,虽然功能还有一些bug,但是可以较为简单的使用 npm地址 核心代码 安装依赖 npm i bingbing…

H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用&#xff…

OpenCV-物体跟踪

文章目录 一、物体跟踪的定义二、OpenCV中的物体跟踪算法三、OpenCV物体跟踪的实现步骤四、代码实现五、注意事项 OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了丰富的功能来实现物体跟踪。以下是对OpenCV中物体跟踪的详细解释: 一、物体跟踪的…

清华大学《2022年+2021年822自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《清华大学822自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2022年真题 2021年真题 Part1:2022年2021年完整版真题 2022年真题 2021年真题…

论文笔记:通用世界模型WorldDreamer

整理了WorldDreamer: Towards General World Models for Video Generation via Predicting Masked Tokens 论文的阅读笔记 背景模型实验 背景 现有的世界模型仅限于游戏或驾驶等特定场景,限制了它们捕捉一般世界动态环境复杂性的能力。针对这一挑战,本文…

【若依笔记】-- 精简若依项目只保留系统管理

环境:最近项目需要计划使用若依来开发软件,使用若依有一个问题,若依代码框架还是比较冗余,不够精简,还有一点是若依Security权限校验,对于实现一对多的前台,比较麻烦,我这边的业务是…

大一物联网要不要转专业,转不了该怎么办?

有幸在2014年,踩中了物联网的风口,坏消息,牛马的我,一口汤都没喝上。 依稀记得,当时市场部老大,带我去上海参加电子展会,印象最深的,一些物联网云平台,靠着一份精美PPT&a…

【Python爬虫系列】_031.Scrapy_模拟登陆中间件

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈…

接口测试(八)jmeter——参数化(CSV Data Set Config)

一、CSV Data Set Config 需求:批量注册5个用户,从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果

Linux 进程概念

目录 冯诺依曼体系结构(了解) 周边知识 操作系统 如何管理 解释打印 ★库函数 ★系统调用 进程 概念 PCB 结构示意图 系统调用 监控脚本 gitpid / gitppid 解释样例 chdir /proc 解释样例 运行起来后删除磁盘中小体积的可执行程序 …

RHCSA第二次作业

4、将整个 /etc 目录下的文件全部打包并用 gzip 压缩成/back/etcback.tar.gz 5、使当前用户永久生效的命令别名:写一个命令命为hello,实现的功能为每输入一次hello命令,就有hello,everyone写入文件/file.txt中。 6、创建mygroup组群&#xff…

IDEA关联Tomcat——最新版本IDEA 2024

1.链接Tomcat到IDEA上 添加Tomcat到IDEA上有两种方式: 第一种: (1)首先,来到欢迎界面,找到左侧的Customize选项 (2)然后找到Build、Execution、Deployment选项 (3&am…

ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 目录 前…

Java 输入与输出(I/O)之字节流、字符流与转换流

Java 输入/输出流(Input/Output,简称I/O)是Java语言用于读写数据的API,它提供了一系列类和接口,用于读取和写入各种类型的数据信息。 I/O流按数据单元(粒度大小)可分为字节流(以字节…

什么样的JSON编辑器才好用

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。随着互联网和应用程序的快速发展,JSON已经成为数据传输和存储的主要格式之一。在处理和编辑JSON数据…

太速科技-212-RCP-601 CPCI刀片计算机

RCP-601 CPCI刀片计算机 一、产品简介 RCP-601是一款基于Intel i7双核四线程的高性能CPCI刀片式计算机,同时,将CPCI产品的欧卡结构及其可靠性、可维护性、可管理性与计算机的抗振动、抗冲击、抗宽温环境急剧变化等恶劣环境特性进行融合。产品特别…

unity开发之可视化制作动画

录制动画 1)打开录制动画页面(或者按快捷键ctrl6) 2)选中需要录制动画的对象 3)创建动画列表,注意现在还没有录制动画,我这里创建了开门和关门动画列表 4)选择需要录制动画的对象的相…

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验 要求:抓取该网址下的视频&…

大数据-190 Elasticsearch - ELK 日志分析实战 - 配置启动 Filebeat Logstash

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

uniapp:上拉加载更多、下拉刷新、页面滚动到指定位置

提醒 本文实例是使用uniapp进行开发演示的。 一、需求场景 在开发商品(SKU)列表页面时,通常有三个需求: 页面下拉刷新,第一页展示最新数据;上拉加载更多数据;列表页面可以滚动到指定位置&#x…