專利名稱:一種ibus拼音碼表的加密方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種拼音碼表的加密方法,尤指一種ibus拼音碼表的加密方法。
背景技術(shù):
在一些專業(yè)用途中,需要對拼音碼表進(jìn)行加密,以防止該碼表被讀取,通常的情況下scim的碼表是一個(gè)特定格式的二進(jìn)制文件,這個(gè)碼表文件由一個(gè)文本格式的碼表轉(zhuǎn)換而來,scim的碼表是只讀的,通常情況下只能對該碼表加密,于使用時(shí)再整體解密,這導(dǎo)致其過程復(fù)雜而且易被破解。目前,Linux發(fā)行版的主流中文輸入法是ibus,其取代了原先的scim輸入法。由于ibus輸入法所采用的碼表機(jī)制與SCim完全不同,ibus的碼表不再采用二進(jìn)制文件的格式存儲,而是使用sqlite數(shù)據(jù)庫的形式存儲的。ibus碼表為一個(gè).db的文件,這個(gè)文件由一個(gè)文本格式的碼表文件通過轉(zhuǎn)換而來。但是由于通常情況下,ibus碼表文件是可讀的, 也就是說,保存碼表信息的db文件是可以直接被讀取,因而也造成ibus輸入法的不安全, 不能保證專用碼表的安全需求,因而也存在著加密的需要。
發(fā)明內(nèi)容
為了解決上述問題,消除上述ibus輸入法中的不安全因素,本發(fā)明的目的在于提供一種ibus拼音碼表的加密方法,以加密碼表。本發(fā)明的主要目的在于,通過對碼表的加密,即使其他人獲得了保存碼表信息的 db文件,其得到的碼表信息也是亂碼,以保證ibus輸入法的安全性。本發(fā)明提供的技術(shù)方案為一種ibus拼音碼表的加密方法,其包含碼表加密轉(zhuǎn)換步驟,其為從文本碼表生產(chǎn)數(shù)據(jù)庫碼表文件的過程中,對漢字字段進(jìn)行加密處理。其中,該碼表加密轉(zhuǎn)換包括以下步驟1)加載明文碼表;2)初始化數(shù)據(jù)庫;3) 明文碼表到數(shù)據(jù)表的轉(zhuǎn)換,即讀取明文碼表文件后,循環(huán)每次讀取一行記錄,判斷是否是碼表文件的末尾,如果是則退出轉(zhuǎn)換,如果否則取出當(dāng)前漢字字段,對記錄中的漢字字段加密,并根據(jù)漢字的長度保存到該數(shù)據(jù)庫相對應(yīng)的表里。對漢字字段用OpenSSL RC4的對稱加密運(yùn)算enc_rc4()來加密。加密后寫入數(shù)據(jù)庫碼表文件的信息為加密的漢字字段,未加密的拼音和使用頻率字段。本發(fā)明還提供了一種ibus拼音碼表的加密方法,其包含,對加密碼表解密使用步驟,其是在輸入法查找碼表時(shí),完成對碼表的解密;在這一步驟中,輸入法通過拼音在加密了的數(shù)據(jù)庫碼表文件中查找得到一組加密了的漢字,然后對這組加密了的漢字進(jìn)行解密處理,得到正常的漢字,再將這組漢字送到候選詞選擇區(qū)。其包括步驟1)首先程序加載碼表數(shù)據(jù)庫;2)程序接收用戶輸入;3)進(jìn)行拼音查詢數(shù)據(jù)庫,然后返回所對應(yīng)的漢字信息,對這些漢字字段進(jìn)行解密運(yùn)算,并在輸出中顯示。對加密了的漢字字段使用OpenSSL RC4解密運(yùn)算dec_rc4 ()進(jìn)行解密,該解密運(yùn)算是通過再次加密運(yùn)算來實(shí)現(xiàn)的。該數(shù)據(jù)庫中有4個(gè)表分表,以用于保存1字、2字、3字、4字的漢字記錄。該數(shù)據(jù)庫中的各記錄項(xiàng)包含加密的漢字字段、未加密的拼音字段和頻率字段。發(fā)明的碼表加密方法適用于ibus輸入法下的拼音碼表加密。通過對碼表部分字段加密,使其他人即使獲得了保存ibus碼表信息的db文件,其得到的ibus碼表信息也是亂碼,保證了 ibus輸入法的安全性。
圖1為碼表在系統(tǒng)中的結(jié)構(gòu)圖; 圖2為現(xiàn)有技術(shù)的碼表轉(zhuǎn)換流程圖3為本發(fā)明采用的碼表加密轉(zhuǎn)換流程圖; 圖4為現(xiàn)有技術(shù)的碼表使用流程圖; 圖5為本發(fā)明采用的對加密碼表解密使用流程圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。對ibus碼表加密的主要思路是在從文本碼表生產(chǎn)數(shù)據(jù)庫碼表文件的過程中對漢字字段進(jìn)行加密處理,此時(shí),寫入數(shù)據(jù)庫碼表文件的信息為加密的漢字字段,未加密的拼音(包括聲母、韻母)和使用頻率字段。對ibus碼表的解密是在輸入法查找碼表時(shí)完成的, 輸入法通過拼音在加密了的數(shù)據(jù)庫碼表文件中查找得到一組加密了的漢字,然后對這組加密了的漢字進(jìn)行解密處理,得到正常的漢字,再將這組漢字送到候選詞選擇區(qū)。本發(fā)明使用了開源的OpenSSL加密技術(shù)。SSL是kcure Socket Layer (安全套接層協(xié)議)的縮寫,其可以在hternet上提供秘密性傳輸。SSL協(xié)議標(biāo)準(zhǔn),目前已有3.0版。 SSL采用公開密鑰技術(shù)。OpenSSL是一個(gè)沒有太多限制的開源軟件,采用C語言作為開發(fā)語言,包含了眾多的密碼算法、公鑰標(biāo)準(zhǔn)及SSL協(xié)議。到目前為止,OpenSSL算法已經(jīng)非常完善,對ssl2.0,ssl3.0及tlsl.O都支持。OpenSSL整個(gè)軟件包大概可以分為三個(gè)主要功能部分密碼算法庫、SSL協(xié)議庫以及應(yīng)用程序。密碼算法有對稱加密算法、非對稱加密算法和信息摘要算法。本發(fā)明采用的加密算法是OpenSSL的RC4算法。RC4加密算法是大名鼎鼎的RSA 三人組中的頭號人物Ron Rivest在1987年設(shè)計(jì)的密鑰長度可變的流加密算法簇。之所以稱其為簇,是由于其核心部分的S-box長度可為任意,但一般為256字節(jié)。該算法的速度可以達(dá)到DES加密的10倍左右,且具有很高級別的非線性。RC4也被叫做ARC4 (Alleged RC4——所謂的RC4),因?yàn)镽SA從來就沒有正式發(fā)布過這個(gè)算法。RC4密碼算法是流算法,也叫序列算法。流算法是從密鑰作為種子產(chǎn)生密鑰流,明文比特流和密鑰流異或即加密。RC4算法由于算法簡潔,速度極快,密鑰長度可變,而且也沒有填充的麻煩,因此其非常適合應(yīng)用于本發(fā)明中,對碼表數(shù)據(jù)庫中的部分關(guān)鍵內(nèi)容進(jìn)行加密及解密。
4
OpenSSL中RC4算法有兩個(gè)函數(shù)RC4_Set_key()設(shè)置密鑰,RC4()加解密。由于RC4可以看作異或,因此加密兩次即解密。以下是RC4_set_key()和RC4()函數(shù)的定義
#include <openssl/rc4. h>
void RC4_set_key(RC4_KEY 氺key, int len, const unsigned char 氺data); Il data為加密密碼,len密鑰的長度,key使用密碼data設(shè)置后得到的長度為Ien的密鑰值
void RC4(RC4_KEY 氺key, unsigned long len, const unsigned char *indata, unsigned char *outdata);
Il key為密鑰值,len為待加密數(shù)據(jù)的長度,indata為待加密的數(shù)據(jù),outdata為加密后的數(shù)據(jù)
本發(fā)明涉及一種ibus拼音碼表的加密方法,其包括碼表加密轉(zhuǎn)換和對加密碼表解密使用兩個(gè)部分。其中,碼表加密轉(zhuǎn)換包括以下步驟
1)加載明文碼表(步驟31);
2)初始化數(shù)據(jù)庫(步驟32);
3)明文碼表到數(shù)據(jù)表的轉(zhuǎn)換,即讀取明文碼表文件后,循環(huán)每次讀取一行記錄,判斷是否是碼表文件的末尾(步驟33),如果是則退出轉(zhuǎn)換,如果否則取出當(dāng)前漢字字段(步驟 34),對記錄中的漢字字段用OpenSSL RC4的對稱加密運(yùn)算enc_rc4 ()來加密(步驟35), 根據(jù)漢字的長度會(huì)保存到數(shù)據(jù)庫相對應(yīng)的表里(步驟36)。對加密碼表解密使用包括步驟首先程序加載碼表數(shù)據(jù)庫(步驟51),程序接收用戶輸入(步驟52),進(jìn)行拼音查詢數(shù)據(jù)庫(步驟53),然后返回所對應(yīng)的漢字信息,對這些漢字字段使用OpenSSL RC4解密運(yùn)算dec_rc4 ()進(jìn)行解密(步驟54),并在輸出中顯示(步驟 55)。以下通過具體實(shí)施例來說明其實(shí)施方法
ibus的碼表轉(zhuǎn)換工具是python語言實(shí)現(xiàn)的,需要使用OpenSSL的python包叫 M2Crypto,它完整支持OpenSSL。以下是漢字字段加密的函數(shù)調(diào)用 from M2Crypto import RC4 rc4 = RC4. RC4 () rc4.set_key(key)
rc4. update (data) //data為加密字段,返回加密后的數(shù)據(jù) ibus的拼音碼表解析是在ibus-pinyin包中,是c++語言實(shí)現(xiàn),需要使用OpenSSL的 c接口來對查詢返回的字段進(jìn)行解密,這里創(chuàng)建key時(shí)使用的密碼需要和上面python轉(zhuǎn)換工具中使用的密碼保持一致,以下是封裝的加密函數(shù)enc_rc()的定義 enc_rc4 (data, len, key) {//data
RC4_set_key ()
for (i=0; i<k; i++) {RC4 (key, Ienj indata,outdata)
ι ι
dec_rc4 () {
enc_rc4 () ; //dec_rc4 實(shí)為 enc_rc4 的調(diào)用
}
圖1描述了本發(fā)明碼表、數(shù)據(jù)庫的格式。如圖1所示,明文碼表和密文碼表的數(shù)據(jù)格式相同,每行表示一個(gè)記錄,每條記錄包括漢字、頻率、標(biāo)記、拼音字段,以空格分隔。數(shù)據(jù)庫碼表根據(jù)漢字的長度進(jìn)行分類,目前存儲了 4個(gè)表,分別是單字表、雙字表、3字表、4字表,每個(gè)表中記錄了漢字信息、頻率信息和拼音信息。圖2為現(xiàn)有技術(shù)的碼表轉(zhuǎn)換流程圖,圖3為本發(fā)明采用的碼表加密轉(zhuǎn)換流程圖。圖 3比圖2增加了一個(gè)操作步驟加密運(yùn)算(步驟35)。如圖3所示,碼表加密轉(zhuǎn)換的具體步驟如下
1)加載明文碼表(步驟31),碼表是文本文件,每行表示一個(gè)漢字或詞組記錄,一行中的記錄有4個(gè)記錄項(xiàng),分別是漢字字段、頻率字段、標(biāo)志位(保留使用)、拼音,它們以空格分隔;
2)初始化數(shù)據(jù)庫(步驟32),數(shù)據(jù)庫中有4個(gè)表分表用于保存1字、2字、3字、4字的漢字記錄,記錄項(xiàng)有漢字字段、頻率字段、拼音字段,對于1字和多字的表,其主要差別是拼音字段的區(qū)別,若是1字的表,其拼音字段會(huì)分解為2個(gè)字段漢字的聲母和漢字的韻母字段,若是2字的表,其拼音字段會(huì)分解為4個(gè)字段第一個(gè)字的聲母、第一字的韻母、第二字的聲母、第二字的韻母,3字的表和4字的表以此類推,表的結(jié)構(gòu)定義如下
1字的漢字表py_phrase_0結(jié)構(gòu)為
(phrase TEXT, freq INTEGER, sO INTEGER, yO INTEGER); 2字的漢字表py_phraSe_l結(jié)構(gòu)為
(phrase TEXT, freq INTEGER, sO INTEGER, yO INTEGER, si INTEGER, yl INTEGER); 3字的漢字表py_phraSe_2結(jié)構(gòu)為
(phrase TEXT, freq INTEGER, sO INTEGER, yO INTEGER, si INTEGER, yl INTEGER, s2 INTEGER, y2 INTEGER);
4字的漢字表pyt_phrase_3結(jié)構(gòu)為
(phrase TEXT, freq INTEGER, sO INTEGER, yO INTEGER, si INTEGER, yl INTEGER, s2 INTEGER, y2 INTEGER, s3 INTEGER, y3 INTEGER);
3)明文碼表到數(shù)據(jù)表的轉(zhuǎn)換,即程序讀取明文碼表文件后,循環(huán)每次讀取一行記錄, 判斷是否是碼表文件的末尾(步驟33),如果是則退出轉(zhuǎn)換,如果否則取出當(dāng)前漢字字段 (步驟34),對記錄中的漢字字段用OpenSSL RC4的對稱加密運(yùn)算enc_rc4 ()來加密(步驟35),根據(jù)漢字的長度會(huì)保存到數(shù)據(jù)庫相對應(yīng)的表里(步驟36)。其中,1字的記錄保存到表py_phrase_0中,2字的記錄保存到表py_phrase_l中,3字的記錄保存到表py_phrase_2 中,4字的記錄保存到py_phrase_3中,完成后判斷碼表是否結(jié)束(步驟33)。在上述圖3步驟中碼表轉(zhuǎn)換程序讀入明文碼表文件,碼表文件每行都要被轉(zhuǎn)換成數(shù)據(jù)庫中的一個(gè)記錄,碼表文件一行里的數(shù)據(jù)以空格分隔,分別代表漢字、頻率、標(biāo)記和拼音,程序每次處理一行,漢字字段經(jīng)過OpenSSL RC4加密運(yùn)算后無法正常閱讀,達(dá)到預(yù)期效果,然后程序訪問并寫數(shù)據(jù)庫,如果是1個(gè)漢字的記錄則存入第一個(gè)表叫py_phrase_0中, 存入的內(nèi)容有加密的漢字、頻率、此漢字的聲母、此漢字的韻母,如果是2個(gè)漢字的記錄則存入第二個(gè)表叫py_phrase_l中,存入的內(nèi)容有加密的漢字、頻率、第一個(gè)漢字的聲母、第一個(gè)漢字的韻母、第二個(gè)漢字的聲母、第二個(gè)漢字的韻母,如果是3個(gè)漢字的記錄則存入第三個(gè)表叫py_phraSe_2中,存入的內(nèi)容有加密的漢字、頻率、第一個(gè)漢字的聲母、第一個(gè)漢字的韻母、第二個(gè)漢字的聲母、第二個(gè)漢字的韻母、第三個(gè)漢字的聲母、第三個(gè)漢字的韻母, 如果是4個(gè)漢字的記錄則存入第四個(gè)表叫py_phraSe_3中,存入的內(nèi)容有加密的漢字、頻率、第一個(gè)漢字的聲母、第一個(gè)漢字的韻母、第二個(gè)漢字的聲母、第二個(gè)漢字的韻母、第三個(gè)漢字的聲母、第三個(gè)漢字的韻母、第四個(gè)漢字的聲母、第四個(gè)漢字的韻母,目前只保存到4 個(gè)漢字的記錄。經(jīng)過循環(huán)把碼表中所有記錄都經(jīng)過加密轉(zhuǎn)換后存入數(shù)據(jù)庫。圖4為現(xiàn)有技術(shù)的碼表使用流程圖,圖5為本發(fā)明采用的對加密碼表解密使用流程圖。圖5比圖4增加了一個(gè)操作步驟漢字字段解密(步驟54)。如圖5所示,對加密碼表解密使用的具體步驟如下
首先程序加載碼表數(shù)據(jù)庫(步驟51),程序接收用戶輸入(步驟52),進(jìn)行拼音查詢數(shù)據(jù)庫(步驟53),然后返回所對應(yīng)的漢字信息,對這些漢字字段使用OpenSSL RC4解密運(yùn)算 dec_rc4()進(jìn)行解密(步驟,并在輸出中顯示(步驟55)。在上述圖5步驟中的對加密碼表解密使用與圖3步驟中的碼表加密轉(zhuǎn)換相對應(yīng), 首先ibus輸入法打開拼音碼表數(shù)據(jù)庫,根據(jù)拼音查詢數(shù)據(jù)庫,并返回漢字信息,此漢字信息是加密后的數(shù)據(jù),需要通過OpenSSL RC4解密運(yùn)算,返回可以識別的中文漢字,并輸出顯示,達(dá)到預(yù)期效果。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種ibus拼音碼表的加密方法,其特征在于,其包含碼表加密轉(zhuǎn)換步驟,其為從文本碼表生產(chǎn)數(shù)據(jù)庫碼表文件的過程中,對漢字字段進(jìn)行加密處理。
2.根據(jù)權(quán)利要求1所述的ibus拼音碼表的加密方法,其特征在于,該碼表加密轉(zhuǎn)換包括以下步驟1)加載明文碼表;2)初始化數(shù)據(jù)庫;3)明文碼表到數(shù)據(jù)表的轉(zhuǎn)換,即讀取明文碼表文件后,循環(huán)每次讀取一行記錄,判斷是否是碼表文件的末尾,如果是則退出轉(zhuǎn)換,如果否則取出當(dāng)前漢字字段,對記錄中的漢字字段加密,并根據(jù)漢字的長度保存到該數(shù)據(jù)庫相對應(yīng)的表里。
3.根據(jù)權(quán)利要求1或2所述的ibus拼音碼表的加密方法,其特征在于,對漢字字段用 OpenSSL RC4的對稱加密運(yùn)算enc_rc4 ()來加密。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,加密后寫入數(shù)據(jù)庫碼表文件的信息為加密的漢字字段,未加密的拼音和使用頻率字段。
5.一種ibus拼音碼表的加密方法,其特征在于,其包含對加密碼表解密使用步驟,其是在輸入法查找碼表時(shí),完成對碼表的解密;在這一步驟中,輸入法通過拼音在加密了的數(shù)據(jù)庫碼表文件中查找得到一組加密了的漢字,然后對這組加密了的漢字進(jìn)行解密處理,得到正常的漢字,再將這組漢字送到候選詞選擇區(qū)。
6.根據(jù)權(quán)利要求5所述的ibus拼音碼表的加密方法,其特征在于,在對加密碼表解密使用步驟中,其包括步驟1)首先程序加載碼表數(shù)據(jù)庫;2)程序接收用戶輸入;3)進(jìn)行拼音查詢數(shù)據(jù)庫,然后返回所對應(yīng)的漢字信息,對這些漢字字段進(jìn)行解密運(yùn)算, 并在輸出中顯示。
7.根據(jù)權(quán)利要求5或6所述的ibus拼音碼表的加密方法,其特征在于,對加密了的漢字字段使用OpenSSL RC4解密運(yùn)算dec_rc4 ()進(jìn)行解密,該解密運(yùn)算是通過再次加密運(yùn)算來實(shí)現(xiàn)的。
8.根據(jù)權(quán)利要求5或6所述的ibus拼音碼表的加密方法,其特征在于,加密后寫入數(shù)據(jù)庫碼表文件的信息為加密的漢字字段,未加密的拼音和使用頻率字段。
9.根據(jù)權(quán)利要求1、2、5或6所述的ibus拼音碼表的加密方法,其特征在于,該數(shù)據(jù)庫中有4個(gè)表分表,以用于保存1字、2字、3字、4字的漢字記錄。
10.根據(jù)權(quán)利要求9所述的ibus拼音碼表的加密方法,其特征在于,該數(shù)據(jù)庫中的各記錄項(xiàng)包含加密的漢字字段、未加密的拼音字段和頻率字段。
全文摘要
本發(fā)明涉及一種ibus拼音碼表的加密方法,該方法從文本碼表產(chǎn)生數(shù)據(jù)庫碼表文件的過程中對漢字字段進(jìn)行加密處理,此時(shí),寫入數(shù)據(jù)庫碼表文件的信息為加密的漢字字段,未加密的拼音(包括聲母、韻母)和使用頻率字段。對ibus碼表的解密是在輸入法查找碼表時(shí)完成的,輸入法通過拼音在加密了的數(shù)據(jù)庫碼表文件中查找得到一組加密了的漢字,然后對這組加密了的漢字進(jìn)行解密處理,得到正常的漢字,再將這組漢字送到候選詞選擇區(qū)。本發(fā)明的碼表加密方法適用于ibus輸入法下的拼音碼表加密。通過對碼表部分字段加密,使其他人即使獲得了保存ibus碼表信息的db文件,其得到的ibus碼表信息也是亂碼,保證了ibus輸入法的安全性。
文檔編號G06F21/00GK102456108SQ20111016957
公開日2012年5月16日 申請日期2011年6月22日 優(yōu)先權(quán)日2011年6月22日
發(fā)明者劉鵬, 夏穎, 李斌 申請人:中標(biāo)軟件有限公司