基于Yii2+sb2文件加解密管理系统的设计与实现
2021-04-20刘氢
刘氢
(上海市国有资产信息中心 上海市 200000)
随着单位信息化工作的持续开展,各类业务信息系统存储了大量加密和非加密的基础文件,要及时准确地获取这些基础数据,并安全的与相关单位进行数据交换并不容易。如何科学有效地管理文件加解密工作是问题的关键所在。
本文提出的基于Yii2+springboot2 的文件加解密管理系统,可以高效解决该问题,对相关单位企业有较高的参考价值。
1 系统架构设计与运行环境
1.1 系统架构设计
传统系统设计流程包括数据库表设计,业务逻辑设计,前端界面设计,后端接口设计等,流程中每一步都需要消耗大量的时间与精力,同时还需要兼顾程序代码的规范性,可读性与可扩展性,这样会导致研发成本过高[1]。现代系统开发模式崇尚高效开发,减少重复造轮子的工作,我们可以在成熟的开发框架上进行二次开发。Yii2 和springboot2 就是两个成熟的开发框架。
Yii2 是一个高性能、安全、专业的全栈开源Web 开发框架,可以用于快速开发各种使用 PHP 语言构建的中大型Web 应用。Yii2 框架实现了MVC 设计模式,每个应用都通过唯一的一个入口脚本web/index.php 文件接受Web 请求并创建控制器实例,该控制器实例创建相应的动作实例,在该请求通过系统验证之后,则执行该动作实例[2]。Yii2 框架集成了用户登录系统及前端ui 系统,并采用模块化的集成方式,所以在该框架上进行开发可以专注于业务逻辑的设计。
Springboot2 也是一个非常优秀的开发框架,其设计目的是用来简化 web 应用的初始搭建及开发过程。借助Springboot2 框架可以快速实现后端的接口开发。
单就文件加解密管理系统而言,我们可以只采用两个开发框架中的任何一个,都可以实现所有功能,但是我们尝试结合两个框架的优点,以期显著提高开发效率和代码质量。系统整体设计图结构如图1所示。
Yii2 框架的优点之一在于Yii2 有自动生成前端页面的gii 工具,Yii2 的视图模块可以通过gii 工具一键生成,极高的节省了前端设计和开发的时间,所以把涉及到文件管理的部分放在Yii2 框架里完成。而Springboot2 框架的优点之一在于接口开发的快速,运用idea 工具生成springboot 项目文件之后,只需要在对应的类下写好相应的路由和函数即可实现相关业务逻辑接口,同时考虑到java 版本的加解密算法库比php 的加解密算法库要更多更全面,所以把涉及到文件加解密的逻辑放在springboot2 框架下实现。
1.2 运行环境搭建
本系统运行环境搭建在Linux 操作系统上。因为Yii2 是基于php 语言的开发框架,而springboot2 是基于java 语言的开发框架,所以需要在Linux 上安装php 和java 的执行环境,同时需要安装web 服务器来保证网络能对外提供访问服务。
最后选用xampp 集成环境作为系统运行的承载方式。XAMPP的名称来自以下技术的组合:X(支持跨平台)、Apache、MySQL或 MariaDB、PHP、Perl。XAMPP 是一个把 Apache 网页服务器与PHP、Perl 脚本语言及 MariaDB 数据库集合在一起的安装包,允许用户可以在虚拟机上方便的建立网页服务器环境。同时,系统采用jdk1.8 来支撑java 应用的执行。
2 系统总体设计
文件加解密管理系统的主要模块包括:用户管理模块,文件管理模块,文件加密模块,文件解密模块。其中,用户管理模块包括用户注册,登录及权限管理;文件管理模块包括文件上传下载,文件crud(增删改查),文件命名规范;文件加密模块包括密钥生成,对称加密和非对称公钥加密;文件解密模块包括获取密钥,对称私钥解密和非对称私钥解密。各模块之间相互联系,方便了在线管理文件加解密流程。如图2所示。
图1:系统整体设计图
图2:系统功能模块
图3:文件加解密流程图
2.1 用户管理模块
文件加解密管理系统的用户管理模块涉及到用户注册,用户登录,及用户的权限管理。其中用户注册和登录模块为Yii2 框架自带功能,用户的权限管理模块则是通过兼容Yii2 框架的Yii2-admin插件来实现。Yii2 的初始访问权限只区分了游客和管理员,如果需要扩展访问权限,需要自己编写代码配合Yii2 自带的rbac 组件去实现权限管理,而Yii2-admin 是将rbac 的管理可视化,只需要在可视化界面上操作就能设置好权限管理规则,并在数据库的规则表里生成相关记录。
2.2 文件管理模块
文件管理模块包含文件的上传下载功能,文件的增删改查功能及文件命名规范管理功能。
通过Yii2 框架里自带的 yiiwebUploadedFile 类,再结合前端小部件和对应的模型类,就可以快速开发好安全的文件上传功能。
文件下载则是通过访问文件路径实现直接下载。
文件的增删改查主要是指文件路径的增删改查,文件管理模块对应的表名为file,Yii2 框架通过gii 工具,可以为file 表创建对应的模型类,控制器类及对应的视图文件。
文件命名主要由五个部分构成:
单位代码_业务代码_版本代码_时间戳_32 位的唯一ID
其中时间戳由年月日和日期对应的时间戳前6 位组合而成,32 位唯一ID 则通过生成通用唯一识别码(UUID:Universally Unique Identifier)算法得出。
UUID 生成的基础原理就是采用md5 函数生成密码字符串,然后用substr 函数在里面截取对应8-4-4-4-12 个字符,其中每个字符是 0-9 或 a-f 范围内的一个十六进制的数字,这样就可以拼出一个32 位的uuid。
2.3 文件加解密模块
随着时代的发展,信息安全已经成为不容忽视的问题。单一的密码体制越来越不能满足信息安全领域的需求,混合密码体制将成为研究的重要趋势。数字信封是一种通过公钥密码算法加密并分发对称密码算法密钥的混合加解密方法[3]。
文件加解密管理系统里也用到了数字信封技术。在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密[4]。
对称加密算法的优点在于执行速度快,缺点在于密钥的传输安全及管理情况,一旦对称加密算法所用的密钥在传输过程中被盗,则传输信息的安全性就无法得到保障。为了解决传输过程中的数据安全问题,业界提出了非对称加密算法。
非对称加密算法中使用到两个密钥,一个是可以公开传输的密钥,简称公钥,一个是自己保存的私钥。非对称加密算法的基本原理是:由数据传输的接收方根据特定的非对称加密算法生成两个密钥,即公钥和私钥,然后把公钥传递给数据传输的发起方,数据传输的发起方对要传输的数据用公钥进行加密,数据接收方收到的是加密后的数据,再用开始生成的私钥对该数据进行解密,就得到了原始的裸数据。非对称加密算法的缺点在于算法的复杂度高,从而使得加解密速度没有对称加密算法的执行速度快。
数字信封技术综合了对称加密算法和非对称加密算法的优点。顾名思义,数字信封就相当于把一把钥匙放在信封里,公开传递的是信封(公钥),这样保证了钥匙(私钥)的安全性。
文件加密模块主要包括生成对称加密需要的私钥key1,然后对原始文件A 进行加密处理,得到对称加密后的文件B;获取非对称加密所需要的公钥C,然后对对称加密需要的私钥key1 进行加密,得到非对称加密后的私钥,即数字信封。
文件解密模块主要包括获取非对称加密算法所需的私钥D,然后对数字信封进行解密,获取对称加密算法所需的密钥key1,最后对用key1 对文件B 进行解密,得到最后的原始文件A。
3 结语
根据实际工作需要,设计与实现了基于Yii2+springboot2 的文件加解密管理系统,将之前需要零散手工处理的加解密工作,系统化集成到系统里,有序管理文件的上传下载及加解密工作,极大的提升了工作效率。
用户管理模块和文件管理模块采用的Yii2 框架技术,使整个系统的架构符合高内聚、低耦合的设计标准。
在文件加解密方面采用数字信封技术一方面解决了私钥传输过程中的安全性问题,另一方面加解密算法执行效率也可以得到提升。采用springboot2 实现数字信封技术,可以很好的利用java 密码库完备的优势,同时也兼顾了密码算法的扩展性。
采用两种成熟框架结合的开发方式可以在确保完成工作需求,保障代码质量的前提下极大的提升开发效率,是值得推广的一种开发模式。