CN102456108B - 一种ibus拼音码表的加密方法 - Google Patents
一种ibus拼音码表的加密方法 Download PDFInfo
- Publication number
- CN102456108B CN102456108B CN201110169574.8A CN201110169574A CN102456108B CN 102456108 B CN102456108 B CN 102456108B CN 201110169574 A CN201110169574 A CN 201110169574A CN 102456108 B CN102456108 B CN 102456108B
- Authority
- CN
- China
- Prior art keywords
- chinese character
- code table
- ibus
- code
- encrypted
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Document Processing Apparatus (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种ibus拼音码表的加密方法,该方法从文本码表产生数据库码表文件的过程中对汉字字段进行加密处理,此时,写入数据库码表文件的信息为:加密的汉字字段,未加密的拼音(包括声母、韵母)和使用频率字段。对ibus码表的解密是在输入法查找码表时完成的,输入法通过拼音在加密了的数据库码表文件中查找得到一组加密了的汉字,然后对这组加密了的汉字进行解密处理,得到正常的汉字,再将这组汉字送到候选词选择区。本发明的码表加密方法适用于ibus输入法下的拼音码表加密。通过对码表部分字段加密,使其他人即使获得了保存ibus码表信息的db文件,其得到的ibus码表信息也是乱码,保证了ibus输入法的安全性。
Description
技术领域
本发明涉及一种拼音码表的加密方法,尤指一种ibus拼音码表的加密方法。
背景技术
在一些专业用途中,需要对拼音码表进行加密,以防止该码表被读取,通常的情况下scim的码表是一个特定格式的二进制文件,这个码表文件由一个文本格式的码表转换而来,scim的码表是只读的,通常情况下只能对该码表加密,于使用时再整体解密,这导致其过程复杂而且易被破解。
目前,Linux发行版的主流中文输入法是ibus,其取代了原先的scim输入法。由于ibus输入法所采用的码表机制与scim完全不同,ibus的码表不再采用二进制文件的格式存储,而是使用sqlite数据库的形式存储的。ibus码表为一个.db的文件,这个文件由一个文本格式的码表文件通过转换而来。但是由于通常情况下,ibus码表文件是可读的,也就是说,保存码表信息的db文件是可以直接被读取,因而也造成ibus输入法的不安全,不能保证专用码表的安全需求,因而也存在着加密的需要。
发明内容
为了解决上述问题,消除上述ibus输入法中的不安全因素,本发明的目的在于提供一种ibus拼音码表的加密方法,以加密码表。
本发明的主要目的在于,通过对码表的加密,即使其他人获得了保存码表信息的db文件,其得到的码表信息也是乱码,以保证ibus输入法的安全性。
本发明提供的技术方案为:一种ibus拼音码表的加密方法,其包含:码表加密转换步骤,其为从文本码表生产数据库码表文件的过程中,对汉字字段进行加密处理。
其中,该码表加密转换包括以下步骤:1)加载明文码表;2)初始化数据库;3)明文码表到数据表的转换,即:读取明文码表文件后,循环每次读取一行记录,判断是否是码表文件的末尾,如果是则退出转换,如果否则取出当前汉字字段,对记录中的汉字字段加密,并根据汉字的长度保存到该数据库相对应的表里。
对汉字字段用OpenSSL RC4的对称加密运算enc_rc4()来加密。
加密后写入数据库码表文件的信息为:加密的汉字字段,未加密的拼音和使用频率字段。
本发明还提供了一种ibus拼音码表的加密方法,其包含,码表加密转换步骤,其为从文本码表生产数据库码表文件的过程中,对汉字字段进行加密处理;对加密码表解密使用步骤,其是在输入法查找码表时,完成对码表的解密;在这一步骤中,输入法通过拼音在加密了的数据库码表文件中查找得到一组加密了的汉字,然后对这组加密了的汉字进行解密处理,得到正常的汉字,再将这组汉字送到候选词选择区。其包括步骤:1)首先程序加载码表数据库;2)程序接收用户输入;3)进行拼音查询数据库,然后返回所对应的汉字信息,对这些汉字字段进行解密运算,并在输出中显示。
对加密了的汉字字段使用OpenSSL RC4解密运算dec_rc4()进行解密,该解密运算是通过再次加密运算来实现的。
该数据库中有4个表分表,以用于保存1字、2字、3字、4字的汉字记录。
该数据库中的各记录项包含加密的汉字字段、未加密的拼音字段和频率字段。
发明的码表加密方法适用于ibus输入法下的拼音码表加密。通过对码表部分字段加密,使其他人即使获得了保存ibus码表信息的db文件,其得到的ibus码表信息也是乱码,保证了ibus输入法的安全性。
附图说明
图1为码表在系统中的结构图;
图2为现有技术的码表转换流程图;
图3为本发明采用的码表加密转换流程图;
图4为现有技术的码表使用流程图;
图5为本发明采用的对加密码表解密使用流程图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
对ibus码表加密的主要思路是在从文本码表生产数据库码表文件的过程中对汉字字段进行加密处理,此时,写入数据库码表文件的信息为:加密的汉字字段,未加密的拼音(包括声母、韵母)和使用频率字段。对ibus码表的解密是在输入法查找码表时完成的,输入法通过拼音在加密了的数据库码表文件中查找得到一组加密了的汉字,然后对这组加密了的汉字进行解密处理,得到正常的汉字,再将这组汉字送到候选词选择区。
本发明使用了开源的OpenSSL加密技术。SSL是Secure Socket Layer(安全套接层协议)的缩写,其可以在Internet上提供秘密性传输。SSL协议标准,目前已有3.0版。SSL采用公开密钥技术。OpenSSL是一个没有太多限制的开源软件,采用C语言作为开发语言,包含了众多的密码算法、公钥标准及SSL协议。到目前为止,OpenSSL算法已经非常完善,对ssl2.0,ssl3.0及tls1.0都支持。OpenSSL整个软件包大概可以分为三个主要功能部分:密码算法库、SSL协议库以及应用程序。密码算法有对称加密算法、非对称加密算法和信息摘要算法。
本发明采用的加密算法是OpenSSL的RC4算法。RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。RC4也被叫做ARC4(Alleged RC4——所谓的RC4),因为RSA从来就没有正式发布过这个算法。
RC4密码算法是流算法,也叫序列算法。流算法是从密钥作为种子产生密钥流,明文比特流和密钥流异或即加密。RC4算法由于算法简洁,速度极快,密钥长度可变,而且也没有填充的麻烦,因此其非常适合应用于本发明中,对码表数据库中的部分关键内容进行加密及解密。
OpenSSL中RC4算法有两个函数:RC4_set_key()设置密钥,RC4()加解密。由于RC4可以看作异或,因此加密两次即解密。以下是RC4_set_key()和RC4()函数的定义:
#include<openssl/rc4.h>
void RC4_set_key(RC4_KEY*key,int len,const unsigned char*data);
//data为加密密码,len密钥的长度,key使用密码data设置后得到的长度为len的密钥值
void RC4(RC4_KEY*key,unsigned long len,const unsigned char*indata,unsigned char*outdata);
//key为密钥值,len为待加密数据的长度,indata为待加密的数据,outdata为加密后的数据
本发明涉及一种ibus拼音码表的加密方法,其包括码表加密转换和对加密码表解密使用两个部分。
其中,码表加密转换包括以下步骤:
1)加载明文码表(步骤31);
2)初始化数据库(步骤32);
3)明文码表到数据表的转换,即:读取明文码表文件后,循环每次读取一行记录,判断是否是码表文件的末尾(步骤33),如果是则退出转换,如果否则取出当前汉字字段(步骤34),对记录中的汉字字段用OpenSSLRC4的对称加密运算enc_rc4()来加密(步骤35),根据汉字的长度会保存到数据库相对应的表里(步骤36)。
对加密码表解密使用包括步骤:首先程序加载码表数据库(步骤51),程序接收用户输入(步骤52),进行拼音查询数据库(步骤53),然后返回所对应的汉字信息,对这些汉字字段使用OpenSSL RC4解密运算dec_rc4()进行解密(步骤54),并在输出中显示(步骤55)。
以下通过具体实施例来说明其实施方法:
ibus的码表转换工具是python语言实现的,需要使用OpenSSL的python包叫M2Crypto,它完整支持OpenSSL。以下是汉字字段加密的函数调用:
from M2Crypto import RC4
rc4=RC4.RC4()
rc4.set_key(key)
rc4.update(data)//data为加密字段,返回加密后的数据
ibus的拼音码表解析是在ibus-pinyin包中,是c++语言实现,需要使用OpenSSL的c接口来对查询返回的字段进行解密,这里创建key时使用的密码需要和上面python转换工具中使用的密码保持一致,以下是封装的加密函数enc_rc()的定义:
图1描述了本发明码表、数据库的格式。如图1所示,明文码表和密文码表的数据格式相同,每行表示一个记录,每条记录包括汉字、频率、标记、拼音字段,以空格分隔。数据库码表根据汉字的长度进行分类,目前存储了4个表,分别是单字表、双字表、3字表、4字表,每个表中记录了汉字信息、频率信息和拼音信息。
图2为现有技术的码表转换流程图,图3为本发明采用的码表加密转换流程图。图3比图2增加了一个操作步骤:加密运算(步骤35)。
如图3所示,码表加密转换的具体步骤如下:
1)加载明文码表(步骤31),码表是文本文件,每行表示一个汉字或词组记录,一行中的记录有4个记录项,分别是汉字字段、频率字段、标志位(保留使用)、拼音,它们以空格分隔;
2)初始化数据库(步骤32),数据库中有4个表分表用于保存1字、2字、3字、4字的汉字记录,记录项有汉字字段、频率字段、拼音字段,对于1字和多字的表,其主要差别是拼音字段的区别,若是1字的表,其拼音字段会分解为2个字段:汉字的声母和汉字的韵母字段,若是2字的表,其拼音字段会分解为4个字段:第一个字的声母、第一字的韵母、第二字的声母、第二字的韵母,3字的表和4字的表以此类推,表的结构定义如下:
1字的汉字表py_phrase_0结构为:
(phrase TEXT,freq INTEGER,s0INTEGER,y0INTEGER);
2字的汉字表py_phrase_1结构为:
(phrase TEXT,freq INTEGER,s0 INTEGER,y0 INTEGER,s1INTEGER,y1 INTEGER);
3字的汉字表py_phrase_2结构为:
(phrase TEXT,freq INTEGER,s0 INTEGER,y0 INTEGER,s1INTEGER,y1 INTEGER,s2 INTEGER,y2 INTEGER);
4字的汉字表pyt_phrase_3结构为:
(phrase TEXT,freq INTEGER,s0 INTEGER,y0 INTEGER,s1INTEGER,y1 INTEGER,s2 INTEGER,y2 INTEGER,s3 INTEGER,y3INTEGER);
3)明文码表到数据表的转换,即:程序读取明文码表文件后,循环每次读取一行记录,判断是否是码表文件的末尾(步骤33),如果是则退出转换,如果否则取出当前汉字字段(步骤34),对记录中的汉字字段用OpenSSL RC4的对称加密运算enc_rc4()来加密(步骤35),根据汉字的长度会保存到数据库相对应的表里(步骤36)。其中,1字的记录保存到表py_phrase_0中,2字的记录保存到表py_phrase_1中,3字的记录保存到表py_phrase_2中,4字的记录保存到py_phrase_3中,完成后判断码表是否结束(步骤33)。
在上述图3步骤中码表转换程序读入明文码表文件,码表文件每行都要被转换成数据库中的一个记录,码表文件一行里的数据以空格分隔,分别代表汉字、频率、标记和拼音,程序每次处理一行,汉字字段经过OpenSSL RC4加密运算后无法正常阅读,达到预期效果,然后程序访问并写数据库,如果是1个汉字的记录则存入第一个表叫py_phrase_0中,存入的内容有加密的汉字、频率、此汉字的声母、此汉字的韵母,如果是2个汉字的记录则存入第二个表叫py_phrase_1中,存入的内容有加密的汉字、频率、第一个汉字的声母、第一个汉字的韵母、第二个汉字的声母、第二个汉字的韵母,如果是3个汉字的记录则存入第三个表叫py_phrase_2中,存入的内容有加密的汉字、频率、第一个汉字的声母、第一个汉字的韵母、第二个汉字的声母、第二个汉字的韵母、第三个汉字的声母、第三个汉字的韵母,如果是4个汉字的记录则存入第四个表叫py_phrase_3中,存入的内容有加密的汉字、频率、第一个汉字的声母、第一个汉字的韵母、第二个汉字的声母、第二个汉字的韵母、第三个汉字的声母、第三个汉字的韵母、第四个汉字的声母、第四个汉字的韵母,目前只保存到4个汉字的记录。经过循环把码表中所有记录都经过加密转换后存入数据库。
图4为现有技术的码表使用流程图,图5为本发明采用的对加密码表解密使用流程图。图5比图4增加了一个操作步骤:汉字字段解密(步骤54)。
如图5所示,对加密码表解密使用的具体步骤如下:
首先程序加载码表数据库(步骤51),程序接收用户输入(步骤52),进行拼音查询数据库(步骤53),然后返回所对应的汉字信息,对这些汉字字段使用OpenSSL RC4解密运算dec_rc4()进行解密(步骤54),并在输出中显示(步骤55)。
在上述图5步骤中的对加密码表解密使用与图3步骤中的码表加密转换相对应,首先ibus输入法打开拼音码表数据库,根据拼音查询数据库,并返回汉字信息,此汉字信息是加密后的数据,需要通过OpenSSLRC4解密运算,返回可以识别的中文汉字,并输出显示,达到预期效果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种ibus拼音码表的加密方法,其特征在于,其包含:码表加密转换步骤,其为从文本码表生产数据库码表文件的过程中,对汉字字段进行加密处理;
其中,该码表加密转换包括以下步骤:
1)加载明文码表;
2)初始化数据库;
3)明文码表到数据表的转换,即:读取明文码表文件后,循环每次读取一行记录,判断是否是码表文件的末尾,如果是则退出转换,如果否则取出当前汉字字段,对记录中的汉字字段加密,并根据汉字的长度保存到该数据库相对应的表里。
2.根据权利要求1所述的ibus拼音码表的加密方法,其特征在于,对汉字字段用OpenSSL RC4的对称加密运算enc_rc4()来加密。
3.根据权利要求1所述的方法,其特征在于,加密后写入数据库码表文件的信息为:加密的汉字字段,未加密的拼音和使用频率字段。
4.一种ibus拼音码表的加密方法,其特征在于,其包含:
码表加密转换步骤,其为从文本码表生产数据库码表文件的过程中,对汉字字段进行加密处理;
对加密码表解密使用步骤,其是在输入法查找码表时,完成对码表的解密;在这一步骤中,输入法通过拼音在加密了的数据库码表文件中查找得到一组加密了的汉字,然后对这组加密了的汉字进行解密处理,得到正常的汉字,再将这组汉字送到候选词选择区。
5.根据权利要求4所述的ibus拼音码表的加密方法,其特征在于,在对加密码表解密使用步骤中,其包括步骤:
1)首先程序加载码表数据库;
2)程序接收用户输入;
3)进行拼音查询数据库,然后返回所对应的汉字信息,对这些汉字字段进行解密运算,并在输出中显示。
6.根据权利要求4或5所述的ibus拼音码表的加密方法,其特征在于,对加密了的汉字字段使用OpenSSL RC4解密运算dec_rc4()进行解密,该解密运算是通过再次加密运算来实现的。
7.根据权利要求4或5所述的ibus拼音码表的加密方法,其特征在于,加密后写入数据库码表文件的信息为:加密的汉字字段,未加密的拼音和使用频率字段。
8.根据权利要求1、4或5所述的ibus拼音码表的加密方法,其特征在于,该数据库中有4个表分表,以用于保存1字、2字、3字、4字的汉字记录。
9.根据权利要求8所述的ibus拼音码表的加密方法,其特征在于,该数据库中的各记录项包含加密的汉字字段、未加密的拼音字段和频率字段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110169574.8A CN102456108B (zh) | 2011-06-22 | 2011-06-22 | 一种ibus拼音码表的加密方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110169574.8A CN102456108B (zh) | 2011-06-22 | 2011-06-22 | 一种ibus拼音码表的加密方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102456108A CN102456108A (zh) | 2012-05-16 |
CN102456108B true CN102456108B (zh) | 2014-09-03 |
Family
ID=46039289
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110169574.8A Active CN102456108B (zh) | 2011-06-22 | 2011-06-22 | 一种ibus拼音码表的加密方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102456108B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103580857A (zh) * | 2012-08-06 | 2014-02-12 | 重庆电子工程职业学院 | 一种基于背包加密的汉字报文数据压缩方法 |
CN103873250B (zh) * | 2012-12-18 | 2017-06-20 | 中国移动通信集团河南有限公司 | 一种密文生成方法、密文解密方法及加密解密装置 |
CN108021371A (zh) * | 2016-10-31 | 2018-05-11 | 中标软件有限公司 | 国产平台下搜狗输入法与ibus框架的集成方法 |
CN108681536B (zh) * | 2018-04-27 | 2021-11-26 | 青岛大学 | 一种基于汉语拼音多重映射的无载体隐写方法 |
CN109213741A (zh) * | 2018-11-22 | 2019-01-15 | 浙江中农在线电子商务有限公司 | 高性能日志存储方法及装置 |
CN110650005B (zh) * | 2019-09-17 | 2022-02-01 | 南通大学 | 一种中英文字符串加密方法 |
CN112990775B (zh) * | 2021-04-25 | 2021-08-13 | 浙江数秦科技有限公司 | 一种不记名提名候选人的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1503503A (zh) * | 2002-11-26 | 2004-06-09 | ���µ�����ҵ��ʽ���� | 数据加密、解密方法及装置 |
CN1786963A (zh) * | 2005-07-21 | 2006-06-14 | 曾致中 | 一种数据库密文查询的方法 |
CN101504706A (zh) * | 2009-03-03 | 2009-08-12 | 中国科学院软件研究所 | 数据库信息加密方法和系统 |
CN101957865A (zh) * | 2010-10-27 | 2011-01-26 | 杭州新中大软件股份有限公司 | 一种异构系统间数据交换与共享技术 |
-
2011
- 2011-06-22 CN CN201110169574.8A patent/CN102456108B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1503503A (zh) * | 2002-11-26 | 2004-06-09 | ���µ�����ҵ��ʽ���� | 数据加密、解密方法及装置 |
CN1786963A (zh) * | 2005-07-21 | 2006-06-14 | 曾致中 | 一种数据库密文查询的方法 |
CN101504706A (zh) * | 2009-03-03 | 2009-08-12 | 中国科学院软件研究所 | 数据库信息加密方法和系统 |
CN101957865A (zh) * | 2010-10-27 | 2011-01-26 | 杭州新中大软件股份有限公司 | 一种异构系统间数据交换与共享技术 |
Non-Patent Citations (2)
Title |
---|
fracting.[分享][原创]为ibus输入法导入第三方词库phrase_converter_for_ibus.《[分享][原创]为ibus输入法导入第三方词库phrase_converter_for_ibus》《http://forum.ubuntu.org.cn/viewtopic.php?p=1277555》.2010,第1行到最后1行. * |
fracting.【分享】【原创】为ibus输入法导入第三方词库phrase_converter_for_ibus.《【分享】【原创】为ibus输入法导入第三方词库phrase_converter_for_ibus》《http://forum.ubuntu.org.cn/viewtopic.php?p=1277555》.2010,第1行到最后1行. |
Also Published As
Publication number | Publication date |
---|---|
CN102456108A (zh) | 2012-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10778427B2 (en) | Method and apparatus for encrypting and decrypting product information | |
CN102456108B (zh) | 一种ibus拼音码表的加密方法 | |
TWI750223B (zh) | 區塊鏈加密射頻晶片存儲設計方法 | |
CN108667595B (zh) | 一种大数据文件的压缩加密方法 | |
CN101340279B (zh) | 数据加密及解密方法、系统及设备 | |
CN100576196C (zh) | 内容加密方法、系统和利用该加密方法通过网络提供内容的方法 | |
US20130179684A1 (en) | Encrypted database system, client terminal, encrypted database server, natural joining method, and program | |
CN102752101A (zh) | 阶层式数据加密/解密装置及其方法 | |
CN105959098A (zh) | 基于多分割Feistel网络的保留格式加密算法 | |
GB2512513A (en) | System for determining whether character string has been accepted by automaton | |
CN110505054B (zh) | 一种基于动态白盒的数据处理方法、装置及设备 | |
CN102546156A (zh) | 一种分组加密方法、系统和装置 | |
KR102143525B1 (ko) | 교집합 연산을 지원하는 함수 암호를 위한 방법 및 이를 이용한 장치 | |
CN106131049A (zh) | 一种数据传输加解密的方法 | |
CN103488915A (zh) | 一种软硬件相结合的双重密钥加密的资源加密解密方法 | |
Geetha et al. | Tamilian cryptography: an efficient hybrid symmetric key encryption algorithm | |
CN106295403A (zh) | 一种基于hbase的数据安全处理方法及系统 | |
CN103942500A (zh) | 基于噪声的哈希密文再加密方法及再加密后的解密方法 | |
CN103853943A (zh) | 程序保护方法及装置 | |
CN104486756B (zh) | 一种密笺短信的加解密方法及系统 | |
CN104794243B (zh) | 基于文件名的第三方密文检索方法 | |
CN106951791A (zh) | 一种基于密文的机密文档访问控制系统 | |
Bastanta et al. | Image data encryption using DES method | |
KR20170103321A (ko) | 보안성이 강화된 순서보존 암호화 방법 및 장치 | |
AL-Shakarchy et al. | Cryptographic system based on Unicode |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |