选题要求我们利用 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