汉字加密解密程序的创作及实现

时间:2022-09-21 08:40:00

汉字加密解密程序的创作及实现

摘要:本文根据目前国内汉字加密解密技术稀缺、密文字符可读性和可复制性太差的现状,提出并实现了一种基于GB2312汉字编码的加密解密解决方案。在文中详述了系统的架构、核心算法的实现步骤,并对系统的加解密性能和特征做了分析讨论。

关键词:GB2312汉字编码汉字信息加密可移植加密解密系统

1、随着通信技术和计算机技术的高速发展以及互联网应用的日益普及,计算机网络已经成为大型公司、金融机构、教育机构和政府部门等诸多领域重要信息的交换手段,网络上流通的信息量也呈几何级数增加。但在网络进行信息交换的同时存在着诸多不安全因素,比如信息被窃听、篡改和伪造等,为了有效的保护、存储、管理和使用网上的私有信息,一方面可以在物理方面采取一些措施,如增强网络物理线路和中间节点的安全性,另一方面可以采用积极主动的防护措施,比如对传输中的信息进行加密来降低信息泄露而可能导致的损失。然而,目前大多数主流信息加密解密技术都只能应用于如字母、数字、标点符号等单字节字符构成的信息,而可用于计算机汉字这种双字节字符所构成的信息文件加密的既简单又可靠的密码体制却不多,并且目前加密方法中加密所得的大多数密文可读性及可复制性太差,出现太多不易书写或者辨认的密文字符,如加密后密文字符“ㄆж鞲áモ⒆∷^Я┲璺”,其可复制性和可读性太差,给辨认、书写或复制带来极大不便,不利用密文信息的保存和传递,本文旨在改善这一缺陷。

2汉字编码

汉字的数量是英文字母数量的几个数量级,基本汉字(汉字的偏旁与部首)也比英文字母多得多,并且汉字的组合也比英文字母简单的前后组合复杂得多,因此我们不能用ASCII码或者其它简单的单字节编码代替汉字。常用汉字有3500多个,有“总汇汉字之大成”评价的《康熙字典》收录汉字四万多个,在1994年出版的《中华字海》收录的汉字则多达87019个,而已经通过专家鉴定的北京国安资讯设备公司的汉字字库,收入有出处的汉字有91251个。

目前汉字编码中主要用到的有三类,包括GBK,GB2312和Big5,本文研究以GB2312编码为例。GB2312又称国标码,由国家标准总局在1981年并实施,通行于大陆。它是一个简化字的编码规范,共有7445个图形字符,其中汉字占6763个。GB2312规定“对任意一个图形字符都采用两个字节表示,每个字均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,高位字节为0xB0-0xF7(对应十进制为176-247),低位字节0xA1-0xFE(对应十进制为161-254)。

GB2312将代码表分为72个区(0XB0-0XF7),对应高位字节;每个区有94个位(0XA1-0XFE),对应低位字节,两个字节的值合称为区位码。其中01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。

3加密/解密体制

在本文所设计的汉字加密系统中,首先从指定的可识别格式(如文本文档)的文档中读取汉字信息,并按照GB2312编码标准将汉字转换成数字形式,再将汉字的数字形式以特定的加密算法与加密密钥进行加密运算,并将得到的结果转换成GB2312汉字密文字符,最后输出成密文文档。相应的,在解密系统中,首先从特定格式密文文档中读入加密后的汉字,再将密文汉字按GB2312编码标准转换成数字形式,然后依据解密算法与解密密钥进行解密运算,将运算结果转换成GB2312明文字符,最后输出成明文文档。整个系统结构如图一所示。

3系统实现

3.1汉字编码特征分析

GB2312编码中,汉字编码高位字节范围为0xB0-0xF7(176-247),共72种取值,低位字节范围为0xA1-0xFE(161-254),共94种取值。为了提高密文字符的可读性和可复制性,方便密文的保存和传递,加密后的汉字密文取值范围也指向GB2312汉字区域。

3.2汉字与数字编码之间的相互转化

在GB2312字符编码表中,汉字用两个字节表示,假设一个汉字的高字节为M1,低字节为M2,C1和C2则分别为密文汉字的高字节和低字节。E1、E2分别为对高、低字节的加密运算函数,则加密的转换可表示为:

C1=[E1(M1)(mod72)]+176

C2=[E2(M2)(mod94)]+161

解密运算为加密运算的逆过程,假定D1、D2分别为对高、低字节的解密运算函数,解密时对密文汉字的高低字节分别进行解密运算得到明文高、低位字节:

M1=[D1(C1)(mod72)]+176

M2=[D2(C1)(mod94)]+161

在本系统中,软件先从指定格式文档中逐个读取汉字,将汉字的高位和低位转换成两个数字并分别保存到变量M1、M2中,对M1和M2同时进行加密或者解密运算后得到C1和C2,M1和M2进行转换后可组合成一个GB2312编码的明文汉字,C1和C2进行转换后则可组合成一个GB2312编码的密文汉字。

3.3系统算法实现

整个系统实现的大致算法如下:

3.3.1系统初始化包括汉字存储文件的读取,并从文件中逐个提取需要加密或解密的字符文字存储到相应变量中;设定加、解密判定参数以方便系统智能选择加密或解密操作。

3.3.2汉字数字化即将汉字的两个字节独立开来,并将之转换成以序号为标识的数字形式,设读入的汉字为GBword,高字节存放于字符变量M1,低字节存放于字符变量M2。则

M1=(unsignedchar)GBword.at(0)-176

M2=(unsignedchar)GBword.at(1)-161

3.3.3加解密操作判定依据初始化加解密参数对读入的字符进行操作判定,如果是加密则进行加密操作,否则进行解密操作。

3.3.4加密或者解密运算本系统中多种算法均可套用,以凯撒挪移码(CaesarShiftCipher)为例,加密运算为:

C1=[E1(M1)(mod72)]+176=[M1+4(mod72)]+176

C2=[E2(M2)(mod72)]+161=[M2+5(mod94)]+161

解密运算为:

M1=[D1(C1)(mod72)]+176=[C1-4(mod72)]+176

M2=[D2(C2)(mod72)]+161=[C2-5(mod94)]+161

3.3.5数字汉字化

将两个所得的数字按GB2312编码表的规律转换成汉字,加密或解密后GB2312编码的高字节为C1+176或M1+176,低字节为C2+161或M2+161,两两组合便可得出GB2312的16进制数字编码,进而得到汉字。

3.3.6自动创建一个指定格式的文件,并将已加密或解密的汉字及相应其他未作加、解密处理的字符逐字写入到该文件中。并判断原文件中是否所有汉字均已经完成加、解密操作,如果是则跳到下一步,否则返回第二步。

3.3.7保存解密所得的明文文件或加密所得的密文文件,整个系统的加、解密操作结束。

整个系统的算法如图二所示。

4测试及总结

限于篇幅,本文以包含“加密系统实例”这一短语的文本文档为例作测试,该短语的GB2312十六进制编码分别为“BCD4BDE3C3DCCFB5CDB3CABEC0BE”,每个汉字中前面两个数字为一个位表示区号,后面两个数字为一个位表示区中的序号。利用本文选用的算法步骤4中的公式进行加密后密文十六进制数字形式为“C0D9C1E8C7E1D3BAD1B8CEC3C4C3”,按照GB2312编码机制对应的汉字密文为:“蕾凌轻雍迅蚊穆”。再经解密算法可以正确的得到十六进制编码字符串“BCD4BDE3C3DCCFB5CDB3CABEC0BE”,即为GB2312编码的汉字明文“加密系统实例”。

针对目前现有汉字加密技术在密文信息传递方面存在的缺陷,本文采用改进密文取值域的思路所设计的加解密系统不但可以有效地进行汉字信息加密和解密,还可以根据具体需求非常方便地移植其它加解密算法,系统得到的密文不包含空格、英文、希腊文、俄文、日文和其它可读性较差的符号,有助于密文信息的准确传递和复制。本文所设计的系统简单实用、可移植性强,加密的密文可读性和可复制性好,有较高实用价值。当然,该系统也还有一些不足,比如无法对各种常见格式的汉字编辑文档进行读写,这些都需要进一步完善和改进。