基于多语言的实用简易加解密算法的研究与实践
2017-03-29李进豪
李进豪
(广东省海洋工程职业技术学校,广州 510320)
基于多语言的实用简易加解密算法的研究与实践
李进豪
(广东省海洋工程职业技术学校,广州 510320)
在实际项目开发中,常需要对一些关键信息进行简单的加解密,以保证关键信息的保密性。基于实际工作项目和需求,重点探索基于多语言的实用简易加解密算法的构建和可行性分析,并以实践案例辅以佐证。
多语言;加密;解密;算法;案例
0 引言
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户无法了解信息的内容。加密的逆过程为解密,即将该加密信息转化为原来的形式。本文主要根据笔者的实际工作项目和需求,重点探索基于多语言的实用简易加解密算法的构建及应用(适用范围:ASCII码取值范围为[33,126])。
1 问题的提出
在实际项目开发中,我们常需要对一些关键信息进行简单的加解密,以保证关键信息的保密性。如果这些关键信息属于多系统共享访问信息,将涉及多语言对同一信息进行加解密。例:使用C#语言设计的题库管理系统(参考答案属于关键信息),根据要求发布试题后,一般情况下常在基于C#开发的考试系统中使用,但有时也会在基于VB.NET开发的环境下使用(兼容),也会在基于VBA开发的PPT或Word环境下使用,也会在基于ActionScript 3.0开发的Flash益智游戏中使用。因此,如何基于多语言设计一个简单实用的加解密算法,以适用实际工作需要,满足某些特殊需求,是我们必须解决的问题之一。
2 一种简单实用的加解密算法
2.1 基本原理
(1)定义
●chr():将ASCII码转换为字符
●asc():将字符转换为ASCII码
●len():获取字符串长度
●mod:求余数
●abs():取绝对值
●mid(str,i,j):从字符串str的第i位开始,截取j位字符
●psstr:可变加密字符串(两个字符以上,是加解密公式的关键信息,由用户自定义)
●tm:特征信息(与加密信息相关的特征信息,可以自定义)
●xx:加密前的字符
●jm:加密后的字符
●i:加密字符串的顺序位
●常量:n=6
●变量:k=i mod LEN(passtr)
●变量:passtrnum=Abs(Asc(Mid(passtr,K+1,1))-Asc(Mid(passtr,1,1)))Mod n
(2)加解密算法
加密:jm=Chr(Asc(xx)-(i Mod n)-(Len(tm)Mod n)-passtrnum)
解密:xx=Chr(Asc(xx)+(i Mod n)+(Len(tm)Mod n)+passtrnum)
适用范围:ASCII码取值范围为[33,126],常用可打印的字符。
可变加密字符串(psstr):由用户自定义,可存放文本文件中,一般在加密时自定义或由计算机自动随机产生,解密时需提供同样的可变加密字符串。
2.2 算法的定义域与值域
(1)加密算法的定义域与值域
●定义域
根据算法的适用范围,可知本算法的定义域为[33,126]。
●值域
从加密算法的定义(n=6)可知,“i Mod 6”的值域为[0,5],“Len(tm)Mod 6”的值域为[0,5],passtrnum的值域为[0,5],故运算式(i Mod 6)+(Len(tm)Mod 6)+ passtrnum的值域为[0,15]。
根据上述分析,加密算法“Asc(xx)-(i Mod 6)-(Len(tm)Mod 6)-passtrnum”的值域为[18,126]。
(2)解密算法的定义域与值域
解密算法是加密算法的逆运算,故加密算法的定义域为解密算法的值域,加密算法的值域为解密算法的定义域。根据分析可知,解密公式的定义域与值域是:
定义域:[18,126]
值域:[33,126]
(3)结论
根据上述讨论,加密算法与解密算法的定义域与值域均在ASCII码的有效范围中,因此上述加解密算法是可行、有效的。绝大多数情况下,存储时所有在ASCII码有效范围中的字符均可以直接保存,但若存在有特别存储要求的文件格式,则需要经过特殊处理。此外,如果需要加密的信息范围较小且可知,但加密后的信息有特别要求,则可根据值域的要求,在加解密算法中加上一个常数mycon,以适应实际需要。此时,加解密算法变形为:
加密:jm=Chr(Asc(xx)-(i Mod n)-(Len(tm)Mod n)–passtrnum+mycon)
解密:xx=Chr(Asc(xx)+(i Mod n)+(Len(tm)Mod n)+passtrnum-mycon)
2.3 通用加解密程序
2.4 特殊应用示例1
(1)应用要求
参考答案(英文字母),存储格式为XML文件。
(2)定义域与值域
●定义域:[65,122]
●值域:[50,122]
●说明:存在特殊字符“<”和“>”,需要使用替代字符“(”和“)”
(3)示例
tm=”中国近代史上第一个不平等条约是()”
passtr="66"
原信息:B
加密后信息:(
2.5 特殊应用示例2
(1)应用要求
以“日期+时间”命名的文件名(纯数字),需要对该文件名进行简单加解密。
(2)定义域与值域
使用加解密的变形算法,mycon取值为32。
●定义域:[48,57],对应字符为0至9
●值域:[65,89]
●说明:值域的对应字符为A至Y,可以满足文件名命名的特殊需求
(3)示例
tm=”2016111601839710”
passtr="16ABC123XYZ"
原信息:2016111601839710
加密后信息:HFENHLJMEDOJPLJH
3 常用编程语言的实现技术
在上述算法中,基于多语言对信息进行加解密,获取字符串长度、求余数、取绝对值、截取字符等,常有编程语言都有标准的函数,限于篇幅关系,不作讨论。下文主要讨论算法中的核心运算“字符与ASCII码”的相互转换(以字符“A”对应的ASCII码65为例,字符“A”的变量名为st,65的变量名stnum)。
3.1 C#
●字符转换为ASCII码:(int)st。
●ASCII码转换为字符:(char)stnum。
3.2 C++
●字符转换为ASCII码:(int)st。
●ASCII码转换为字符:(char)stnum。
3.3 VB.NET
●字符转换为ASCII码:Asc(st)。
●ASCII码转换为字符:Chr(stnum)。
3.4 VBA
●字符转换为ASCII码:Asc(st)。
●ASCII码转换为字符:Chr(stnum)。
3.5 Java
●字符转换为ASCII码:(int)st.getBytes()。
●ASCII码转换为字符:(char)stnum。
3.6 JavaScript
●字符转换为ASCII码:st.charCodeAt(0);
●ASCII码转换为字符:String.fromCharCode(stnum)。
3.7 ActionScript
●字符转换为ASCII码:st.charCodeAt(0);
●ASCII码转换为字符:String.fromCharCode(stnum)。
4 案例
4.1 需求分析
在基于C#开发的题库管理系统中发布的试题(题型:判断题、单选题、多选题),需要在Word环境下使用(VBA),同时也需要在Flash环境下使用(ActionScript 3.0)。考虑到通用性和拓展需要,发布的试题存储格式为XML格式,因此发布时参考答案需要进行简易的加密,使用时参考答案需要进行解密。
4.2 基本原理
(1)定义域与值域
●定义域:[65,122],主要存储26个英文母(大小写字母均可,判断题,“正确”用“A”表示,“错误”用“B”表示)
●值域:[50,122]
●特别处理:在XML文件中,“<”和“>”是不可以直接存储的字符,使用代替字符,“(”表示“<”,“)”表示“>”。
(2)基本原理
根据需求分析,本案例的基本原理如图1所示。
图1 基本原理
4.3 实现
(1)基于C#的通用示例性加密代码
●通用示例性加密代码
●信息的加密
加密前信息:A
加密后信息:6
●说明
本例是单选题,代码中的循环基本上是没有作用的,当出现多选题时,循环将实现多选答案的逐个加密(如表1所示)。奇数位与偶数位的加密算法略有差异,主要是为了提升加密的强度。
表1 多选题答案
(2)基于VBA的通用示例性解密代码
●通用示例性解密代码
●信息的解密
解密前信息:6
解密后信息:A
(3)基于ActionScript 3.0的通用示例性解密代码
●通用示例性解密代码
●信息的解密
解密前信息:6
解密后信息:A
5 结语
作为一种实用简易的加解密算法,考虑到通用性,文中n的取值偏小,加密后的字符范围相对也较小。对于特定信息,n的取值可以适当增大。文中提及的代码全部在真实环境下测试通过,并应用于实际工作中,应用效果好。
[1]李进豪等.课堂教学有效性的研究与实践[J].第六届全国农业职业教育教学成果二等奖,2015.
[2]李进豪.基于AES的教师教学能力提升的研究与实践[J].2015年广东省职协优秀科研成果一等奖,2016.
Research and Practice of the Practical and Simple Encryption and Decryption Algorithm Based on Multi Languages
LI Jin-hao
(Guangdong Province Vocational School of Oceanographic Engineering,Guangzhou 510320)
In the actual project exploring,we often need to carry a simple encryption and decryption of some key information,in order to ensure the confidentiality of key information.Based on the actual work project and requirements,focuses on the construction and feasibility analysis of the practical and simple encryption and decryption algorithm based on multi languages,and provides the practical cases as supporting evidence.
Muti Languages;Encryption;Decryption;Algorithm;Case
1007-1423(2017)04-0048-05
10.3969/j.issn.1007-1423.2017.04.011
李进豪(1969-),男,广东汕头人,硕士,高级讲师,高级技师,研究方向为软件工程、网络游戏开发
2016-12-06
2017-01-20
广东省中等职业学校“百千万人才培养工程”专业名师培养对象专项资金(2015-2017)、全国农业职教育“十三五”科研课题(No.2016-135-Y-227)、2015广东省教育研究院课题(No.GDJY-2015-F-b018)