课程设计小组报告

一、设计方案及可行性分析

选题要求我们利用 openssl 实现一个类似 ASN1View 的软件。我们的设计方案如下

  • 用户通过 GUI 选择待解析的文件
  • 软件调用 openssl api 解码文件
  • 软件将解码结果可视化

二、详细设计思路

2.1 系统体系结构,技术选择

采用 QT5 实现 GUI,调用 openssl 库中的 ASN1_parse_dump 函数解码文件,使用 QTTreeWidget 组件将解码结果可视化

2.2 说明程序中用到的关键数据类型的定义,绘制关键程序的流程图,以及各子模块间的调用关系图

  • 关键数据类型的定义

    类型 描述
    BIO openssl 自定义的 IO 流
    ASN1Window 软件的主窗口类,通过其调用窗口组件
    QString QT 自定义的字符串类型
    QTreeWidget QT 定义的树形组件类
  • 关键程序的流程图

  • 各子模块间的调用关系图

三、测试

3.1 测试目的

  • 能否正确解码 ASN1 编码文件(目前仅限 der编码)
  • 能否处理执行过程中发生的异常

3.2 测试流程

测试一

  • 解码小组成员使用 pythonruby 生成的 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

posted @ 2020-05-04 19:53  MustaphaMond  阅读(221)  评论(2编辑  收藏  举报