课程设计小组报告
一、设计方案及可行性分析
选题要求我们利用 openssl
实现一个类似 ASN1View
的软件。我们的设计方案如下
- 用户通过
GUI
选择待解析的文件 - 软件调用
openssl api
解码文件 - 软件将解码结果可视化
二、详细设计思路
2.1 系统体系结构,技术选择
采用 QT5
实现 GUI
,调用 openssl
库中的 ASN1_parse_dump
函数解码文件,使用 QT
的 TreeWidget
组件将解码结果可视化
2.2 说明程序中用到的关键数据类型的定义,绘制关键程序的流程图,以及各子模块间的调用关系图
-
关键数据类型的定义
类型 描述 BIO openssl 自定义的 IO 流 ASN1Window 软件的主窗口类,通过其调用窗口组件 QString QT 自定义的字符串类型 QTreeWidget QT 定义的树形组件类 -
关键程序的流程图
-
各子模块间的调用关系图
三、测试
3.1 测试目的
- 能否正确解码
ASN1
编码文件(目前仅限der
编码) - 能否处理执行过程中发生的异常
3.2 测试流程
测试一
-
解码小组成员使用
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