基于无纸化考试系统对数据安全的要求,提出了实用的分数加密方法。
一、提出成绩加密法。
在无纸化考试中,考试成绩的加密有其自身的特点。对于没有加密或加密不严格的无纸化考试系统,可能导致考试成绩不安全或不准确的方法有:
1.直接修改报告成绩文件中某考生的成绩;
2.如果能确定每个考生的姓名和分数记录在报告的分数文件中的位置,可以直接将分数可能更好的考生记录复制到其他考生存放分数的地方,等等。因此,加密主要考虑以下几个方面:
1)针对上述问题,如何采取有效措施,防止考生直接修改密文或将成绩记录复制到其他考生存放成绩的地方;
2)如何保证解密方便;
3)尽量简单易行。
二、成绩加密解决方案。
为了避免直接复制密文,一个简单的想法是每个候选人都使用不同的密钥。然而,为了方便地获取密钥,我们必须确定生成密钥的方法。如果文章由考生的考试号码、姓名和每个问题的分数组成,可以确定,加密的重点是每个考生除考试号码和姓名外的每个问题的分数。为了不增加密文的长度,降低实现的难度,我们可以使用考生的考试号码作为密钥,这样我们的重点是设计一个良好有效的算法。
在设计算法时,考虑到加密和解密的可操作性,我们利用不同或(XOR)操作的可逆性,决定将明文和钥匙文本(由钥匙转换的字节序列)逐字节进行不同或操作,并在解密时重复加密操作。现在的关键是如何生成钥匙文本?显然,直接使用测试号码作为钥匙文本是不够的。我们注意到测试号码中不可避免地会出现一些数字,所以我们决定计算测试号码中的数字,生成两个数字NUMI和NUM2,然后依次从文件(假设文本)中出现。
NUM1位置为JSH.DLL)开始,每个间隔NUM2字节取一个字节形成钥文序列(由密钥转换的子密钥)。
假设文件JSH.DLL的长度为N,我们可以使NUM1和NUM2的值范围在0到(N-1)之间,这样每个关键文本都有N*N的可能性。你甚至可以根据测试号码从不同的文件中选择钥匙文本序列,每个候选人将使用不同的钥匙文本,当N足够大时,它将能够达到所需的安全水平。
三、实现成绩加密方案。
根据上述分析,函数Endecrypt可以编写。函数的入口参数应包括密钥和明文,返回值为密文(更好的方法是在传输明文时使用地址传输,无需返回值)。不失一般性,可以假设测试号为5位数。
数字,以考号为密钥。明文由考号、姓名和成绩004100500800090)组成。出于安全考虑,我们简单地加密了考号。密文以字符串类型返回。以下是实现Borlanddelphi5.O时的一些关键代码:
proceduretformi.endecrypt(Strfilename:String;//指定从哪个文件中取钥匙文序列iend:integer;///考号结束处varsrcString;///明文字符串);
var
idistance:integer;
KeyFile:File;
Pointofile:integer;
Char;
String;
StrkeyStd:String;
begin
StrkeyStd:=HunannormaiuniversityDepartmentomputercation;
Strkh:=Copy;
fori:=Itoienddobegin。
Strkeil:=Chr(Ord(Srcstring[Ei])xorord(StrkeyStdSrcstr[i]:=Strkh[i];
end;
AssignFile(KeyFile,StrFilename);
Reset(KeyFile,1);
Pointoffde:=(Strtolnt64(Strkh)mod76):modfileSizei(KeyFile);//生成NUMI。
idistance:=Strtolnt64(Strkh)mod24;11生成NUM2。
以上产生NUMI和NUM2的算法可采用其他更复杂有效的方法。
Seek(KeyFde,Pointoffile);
fori:=iend+1tolength(SrcString)dobegin。
BlockRead(KeyFile,ch,1);
Srcstrii]:=Chr(Srcstrin~/il)xorord(ch);
Pointoffile:=(Pointoffile+idistance)modfileSize;
Seek(KeyFile,Pointoffile);
end;
CloseFile;
end;
实现时,我们还可以做以下改进:
1.取钥匙文序列时,应从考试系统中实际使用的可执行程序或动态链接库等二进制文件中取出,而不是从文本文件等易于查看的文件中取出,这样会更安全。不要从Windows等软件中取出,以免因环境不同而无法正确解密。
2.不妨在每个记录前后添加少量冗余字符,这样更难判断每个记录的开始和结束。您甚至可以在最终回收的结果文件前后添加一些冗余数据,这对判断记录的长度有一定的混淆作用。
3.为了方便使用,建议将程序写入动态链接库(DLL文件)。
4.同时,我们认为考试系统应该能够将网络上每台机器中的数据收集到某台机器上,并避免手动收集到每台机器上。这样,我们就需要考虑如果网络传输丢的包和未来的备查,这样我们就可以在考生的机器上为每个考生制作一份文件,以存储考生的考试号码、姓名和成绩等信息。这些信息和回收的考生信息可以采用类似的加密方法。只是明文不再需要包含考生的考号,而是直接将考生的考号作为考生信息文件文件名称的一部分。
用同样的方法解密。
小知识无纸化考试。
无纸化考试是基于财政部发布的《职业资格考试大纲》。以优化题库资源为基础。以现代信息技术为手段,随机组卷生成无纸化试卷进行考试,及时生成考试成绩,集考试报名、试卷生成、计算机考试、阅卷、成绩生成、证书(单)打印于一体。多元化、新型的职业考试管理模式。