当前位置:首页 期刊杂志

基于Java的比赛工位抽签加密系统设计与实现*

时间:2024-05-04

董宝庆,王 振,李立亚,闾立新,吴 丽

(无锡科技职业学院,江苏 无锡 214028)

0 引言

我国职业院校技能大赛赛项规程中,参赛队伍比赛工位的分配有一套抽签机制。即先进行一次加密,选手按抽签顺序号依次抽取参赛编号。然后二次加密,选手凭参赛编号抽取比赛工位号,按此工位号就位参加比赛。裁判及工作人员无法得知工位上是哪个队伍,参赛过程中的队伍保密,能保障比赛公平。

当前赛事仍然使用传统的纸质加密方式抽签。赛后人工核对解密,获得比赛工位和参赛队伍的对应关系。纸质加密操作麻烦,需要制作抽签工具。如果设计一款操作简便,具有信息加密功能的比赛工位抽签系统,可以提高工作的效率。

针对以上情况,我们利用Java 技术,并结合加密算法,开发了一款抽签加密系统,加密过程中所有选手的信息都是以密文保存,只能在规定的电脑上进行加/解密,极大地保护了选手的隐私。

1 抽签加密系统设计

本软件由三个独立的子系统构成,分别为一次加密子系统,二次加密子系统和解密子系统。一次加密子系统的功能是为选手抽取参赛编号。凭参赛编号,使用二次加密子系统进行二次抽签,抽取比赛工位号。比赛完成后,使用解密软件对加密内容逐级地解密。系统总体功能设计如图1所示。

图1 系统结构图

1.1 子系统功能流程设计

加密系统各子系统间功能流转如图2所示。抽签顺序号在赛前说明会时抽取确定好,本系统不涉及该顺序号的抽签分配。

图2 子系统功能流程图

一次加密子系统模块工作流程分如下几步:首先初始化一次加密表,用系统当前时间和参赛队数量,生成随机参赛编号,加密后保存在“一次加密表”中。系统根据赛队抽签顺序号随机抽取未经分配的参赛编号,之后将顺序号用组密钥进行加密,将密文写入与参赛编号行对应的单元格中。将参赛编号密文生成二维码,调用打印机打印在热敏标签上,交给参赛选手二次加密用。

二次加密子系统首先获取参赛队数量,根据赛队数量初始化二次加密表,工位号用组密钥加密,写入“二次加密表”中。工作人员用扫码枪扫描参赛编号二维码,获取二维码中的数据。系统从未分配的工位号中随机抽取一个工位,写入到该工位行所在的单元格,并打印交给选手,实现工位的随机分配功能。

解密模块使用参赛队伍抽签顺序表和经过一、二次加密子系统生成的“一次加密表”、“二次加密表”,根据各表中数据的对应关系,找出工位号和参赛队伍的对应关系,生成解密表,完成工位号的解密操作。

1.2 使用的表结构

本系统的加解密过程共会用到四张表格,分别为参赛队伍抽签顺序表、一次加密表、二次加密表和解密表。

如图3,参赛队伍抽签顺序表由表头和赛队信息组成。主要包括赛队ID、赛队信息、抽签顺序号三类信息。赛队信息由裁判在加密之前导入。根据本表,建立抽签顺序号和队伍的对应关系。

图3 参赛队伍抽签顺序表

如图4,导入参赛队伍抽签顺序表后,系统会从此Excel 表格sheet1 中读取表头生成一次加密表表头。系统根据工作人员输入的抽签顺序号,分配随机编号。一次加密表由表头、抽签顺序号和参赛编号组成。参赛编号同时生成。输入抽签顺序号后,系统会将此抽签顺序号随机写入抽签顺序号单元格所在列的某一行。本图中有密文标注字样的数据以密文存于表格中,无密文标注字样的数据全部以明文保存,下文表格同理。一次加密表将参赛编号和抽签顺序号建立起联系。

图4 一次加密(关键信息)表

如图5,进行第二次加密时,系统会要求输入参赛编号,根据参赛编号分配赛位号。二次加密表中包含了参赛编号、赛位号。表中参赛编号与赛位号单元格一一对应,赛位号随表头一起生成,参赛编号被随机写入到参赛编号单元格所在列的某一行。根据此表信息,将赛位号和参赛编号建立起对应关系。

图5 二次加密(关键信息)表

根据前三张表所建立的对应关系,进行溯源,在解密表中由赛位号找到参赛编号,由参赛编号找到抽签顺序,由抽签顺序找到参赛队伍信息,最终获取解密表所需的数据。解密表除了表头以外还包括赛位号、参赛编号、参赛队伍、加密裁判签名和仲裁组裁判签名以及日期这些信息,解密表关键信息如图6所示。解密表中的核心数据为赛位号、参赛编号及其参赛队伍,理清了从参赛队伍抽签顺序表,到一次加密表和二次加密表的线索,最终形成了解密表。

图6 解密(关键信息)表

2 软件安全设计

2.1 加密算法选用

MD5 散列算法用于生成唯一的“指纹”信息,本系统根据登录时的三个MAC 地址,进行拼接等操作后,对得到的字符串进行MD5 散列处理。截取经MD5散列后的某一段字符串作为种子,进行DES 加密,得到组密钥。

DES 算法为密码体制中的对称加密体制,本系统使用64 位长度的密钥进行DES 加密运算。DES 加密解密为同一套密钥,初始密钥长度为8字节。本系统根据初始密钥长度,以“多删少补”原则,选择性删除和补位操作,构建64位密钥。鉴于本系统对加密数据的使用时间不长,因而使用DES算法和64位长度的密钥进行加密是安全的。

2.2 组密钥生成

本软件通过登录时动态获取计算机的MAC 地址(下文简称为MAC),经过一系列算法,生成该组计算机共用的组密钥。通过组密钥,可以定义同组计算机。

如图7所示,部署同组计算机时,首先确定一组计算机(默认为三台)。进入部署界面,在各个计算机中分别获取本地计算机的唯一标识,此时同组计算机的三个MAC 均已获取到。把另外两台计算机的MAC对应填入输入框,与获取的本机MAC 一起,进行一系列的操作,生成组密钥。

图7 部署计算机图

生成过程,根据三个有序输入的MAC,进行规则性排列拼接等操作,对混合生成的初始密钥,进行散列处理,得到中间密钥。对中间密钥进行DES 加密处理,生成组密钥。

如此,就可以使部署在三台计算机上的三个子系统初始化得到相同的组密钥,组密钥登录时即生成,存放在内存中,程序退出时组密钥销毁,保证了密钥存放的安全。

2.3 数据安全性设计

系统加密后生成的文件都是以密文形式保存在文件中。要获得明文,需要用解密子系统进行操作。一、二次加密子系统没有设置解密功能,这可以保证只有解密子系统才可解密,防止一、二次加密过程中因人为因素而发生数据泄露的情况。

Java Excel API 是一个开放源码项目,它既能从本地系统中读取Excel 电子表格,也能从输入流中读取Excel电子表格,导出各种样式的Excel表。本系统使用此API,将要加密的信息以明文形式保存在内存中,对明文进行加密,将加密后得到的密文写入Excel表中,对重要数据进行加密转化。只有通过组密钥才可以正确解密文件中的信息,从而使计算机中的数据信息变得比较安全,由此可以减小抽签信息的泄露的可能性。

表格中的数据采用双随机设计。在一次加密子系统中,生成的随机参赛编号模拟实地抽签时在抽签箱中的参赛编号,根据系统时间戳,随机生成参赛编号。为保证参赛编号的唯一性,生成时会判断该编号是否已存在,若存在则继续生成,直到生成的参赛编号唯一时才写入文件。

此外,为增加安全性和随机性,对将要在表格中放置的参赛编号的次序进行打乱处理,使得抽参赛编号的随机性进一步增强,增强了抽签数据对应关系的安全性。

每支赛队抽签时,使用抽签程序进行算法处理,来模拟随机性抽签。当系统得到一支赛队要抽签的指令时,使用计算机当前系统时间,随机生成一个位置号,判断此位置号是否被占用,若为空则将赛队信息放入,若不为空代表此位置号已被别的赛队占用,继续生成随机位置号,直到找到空位。随机位置号的生成和当前时间有关,这保证了抽签的随机性。

3 可靠性设计

3.1 操作检测功能

本软件的操作检测功能会根据用户当前的使用情况,判断此时软件运行的系统安全性和数据安全性。当系统检测到用户的操作可能涉及软件运行的危害性和软件数据的破坏性、错误性时,根据危害性的大小和紧急程度,及时发出不同级别的提示信息。如一般性危害的弹窗提示和紧急性破坏的软件停用一定时间等高级保护措施来确保软件的安全。

3.2 断电恢复

本软件设计了断电恢复功能,以应对系统使用过程中出现的异常情况,如断电、程序误操作退出等。

一次加密子系统、二次加密子系统每次向文件中写数据时,将数据同时写入工作文件和备份文件。当登录系统时,系统会检测备份文件中的数据,来判断是否有未完成的抽签任务,如果有,则询问用户是否进行恢复操作,若点击“是”则恢复上次抽签任务,否则重新开启新的一轮的抽签流程。

4 结束语

本文通过对加密算法的学习和研究,创新的采用了计算机分组密钥概念,采用了主流的散列算法和加密方式,设计了一种基于计算机硬件信息的密钥共享机制。组内计算机使用相同的组密钥进行数据加密,保障了数据的互通。本系统为保护参赛过程中的信息安全,所有的重要信息都做了乱序处理且以密文保存。此软件可以应用在职业院校技能大赛这种抽签计算机不能联网、且需要安全保管防抽签排位信息泄密的场合,适用范围很广。在后续研究中,将进一步优化软件的人性化操作设计、可靠性设计和安全性设计,提高软件的易用性。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!