选题要求我们利用 openssl
实现一个类似 ASN1View
的软件。我们的设计方案如下
GUI
选择待解析的文件openssl api
解码文件采用 QT5
实现 GUI
,调用 openssl
库中的 ASN1_parse_dump
函数解码文件,使用 QT
的 TreeWidget
组件将解码结果可视化
关键数据类型的定义
类型 | 描述 |
---|---|
BIO | openssl 自定义的 IO 流 |
ASN1Window | 软件的主窗口类,通过其调用窗口组件 |
QString | QT 自定义的字符串类型 |
QTreeWidget | QT 定义的树形组件类 |
关键程序的流程图
各子模块间的调用关系图
ASN1
编码文件(目前仅限 der
编码)解码小组成员使用 python
,ruby
生成的 der
文件
测试结果
结果分析
左侧显示了 der
文件中各节点的类型信息,嵌套关系。点击任一个节点,右侧会显示其的数据类型,长度(不包括2字节的头部长度),具体数值。
尽管我们已经指定打开文件的后缀名只能是 *.der *.cer *.crt
,但这些文件很可能是 pem
编码。若解析错误,软件应该提示用户
生成一个 pem
编码的证书,使用软件打开
弹出报错,测试通过
解析 openssl
生成的 der
编码格式的证书
生成 rsa_public_key.crt
证书,再使用 openssl x509 -outform der
命令将其转成 der
编码。使用软件打开
测试结果
命令行使用 openssl asn1parse
命令解析证书,对比发现,正确解码
openssl
原生 api
,简洁高效见 https://gitee.com/imjoking/curriculum_design/tree/master/ASN1parser
原文:https://www.cnblogs.com/20175211lyz/p/12827946.html