本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種信息加、解密的方法及裝置。
背景技術(shù):
目前,人們對(duì)于其隱私數(shù)據(jù)越來越注重保密,很多人通過加密的形式保存自己的隱私數(shù)據(jù)。
現(xiàn)有技術(shù)中加密方法有很多,但是都是基于文字類的加密解密。但是,再復(fù)雜的文字也有被破譯的時(shí)刻,數(shù)據(jù)的安全性依然得不到保障。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)存在的問題,本發(fā)明實(shí)施例提供了一種信息加、解密的方法及裝置,用于解決現(xiàn)有技術(shù)中對(duì)文字信息進(jìn)行加密后,還是以文字的形成進(jìn)行傳輸,導(dǎo)致信息容易被破解,數(shù)據(jù)安全性得不到保證的技術(shù)問題。
本發(fā)明提供一種信息加密的方法,所述方法包括:
獲取待加密信息的明文信息;
將所述明文信息轉(zhuǎn)換為字符編碼;
將所字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息;
根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為至少一組顏色值;
通過所述至少一組顏色值生成圖像,所述圖像即為對(duì)所述明文信息進(jìn)行加密的加密結(jié)果。
上述方案中,根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為至少一組顏色值,包括:
確定每組數(shù)字信息的數(shù)值;
確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)相應(yīng)的數(shù)值與R顏色對(duì)應(yīng)的最大階層確定所述R顏色的顏色值,并獲取第一剩余值;
根據(jù)所述第一剩余值與G顏色對(duì)應(yīng)最大的階層確定所述G顏色的顏色值,并獲取第二剩余值;
基于所述第二剩余值確定所述B顏色的顏色值;
將所述R顏色的顏色值、G顏色的顏色值及所述B顏色的顏色值進(jìn)行組合,獲取至少一組(R,G,B)顏色值;其中,所述R顏色為紅色,所述G顏色為綠色,所述B顏色為藍(lán)色,
上述方案中,當(dāng)通過所述至少一組顏色值生成圖像之前,所述方法還包括:
接收混淆數(shù)值;
根據(jù)所述混淆數(shù)值隨機(jī)生成相應(yīng)數(shù)量的混淆色塊;
基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置。
上述方案中,通過所述至少一組顏色值生成圖像,包括:
確定寫入所述至少一組顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置,基于所述混淆色塊的數(shù)量及所述混淆色塊在所述圖像中的寫入位置,將所述至少一組顏色值與所述混淆色塊的顏色值依次寫入所述圖像中。
上述方案中,基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置包括:
基于所述混淆數(shù)值的數(shù)量確定每組所述寫入位置的數(shù)量;
確定所述寫入位置的第二基準(zhǔn)點(diǎn);
以所述第二基準(zhǔn)點(diǎn)為起始位置,每組寫入位置依次分布于兩組顏色值所對(duì)應(yīng)的顏色塊之間。
本發(fā)明提供一種信息解密的方法,所述方法包括:
從圖像中讀取至少一組顏色值,所述圖像為對(duì)明文信息進(jìn)行加密的加密結(jié)果;
根據(jù)第二轉(zhuǎn)換規(guī)則將所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息;
將所述數(shù)字信息轉(zhuǎn)換為字符編碼;
將所述字符編碼轉(zhuǎn)換所述明文信息。
上述方案中,根據(jù)第二轉(zhuǎn)換規(guī)則將相所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息,包括:
確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)公式A=(B*C+G)*C+R確定所述數(shù)字信息的數(shù)值A(chǔ);其中,所述每種顏色對(duì)應(yīng)的最大階層相同,所述R為紅色,所述G為綠色,所述B為藍(lán)色,所述C為所述每種顏色對(duì)應(yīng)的最大階層。
上述方案中,當(dāng)所述圖像中混淆有混淆色塊時(shí),從所述圖像中讀取至少一組顏色值包括:
接收混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的隨機(jī)生成的混淆色塊的數(shù)量;
基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置;
確定寫入所述顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置遍歷所述圖像,在遍歷過程中,基于所述混淆色塊的數(shù)量及在所述混淆色塊在所述圖像中的寫入位置跳過所述混淆色塊,讀取所述至少一組顏色值。
本發(fā)明還提供一種信息加密的裝置,所述裝置包括:
獲取單元,用于獲取待加密信息的明文信息;
第一轉(zhuǎn)換單元,用于將所述明文信息轉(zhuǎn)換為字符編碼;
第二轉(zhuǎn)換單元,用于將所述字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息;
第三轉(zhuǎn)換單元,用于根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為至少一組顏色值;
生成單元,用于通過所述至少一組顏色值生成圖像,所述圖像即為對(duì)所述明文信息進(jìn)行加密的加密結(jié)果。
本發(fā)明還提供一種信息解密的裝置,所述裝置包括:
讀取單元,用于從圖像中讀取至少一組顏色值,所述圖像為對(duì)明文信息進(jìn)行加密的加密結(jié)果;
第四轉(zhuǎn)換單元,用于根據(jù)第二轉(zhuǎn)換規(guī)則將所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息;
第五轉(zhuǎn)換單元,用于將所述數(shù)字信息轉(zhuǎn)換為字符編碼;
第六轉(zhuǎn)換單元,用于將所述字符編碼轉(zhuǎn)換為所述的明文信息。
本發(fā)明提供了一種信息加、解密的方法及裝置,所述加密方法包括:獲取待加密信息的明文信息;將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼;將所字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息;根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為至少一組顏色值;通過所述至少一組顏色值生成圖像,所述圖像即為對(duì)所述明文信息進(jìn)行加密的加密結(jié)果;這樣,就將文字信息轉(zhuǎn)換為圖像實(shí)現(xiàn)對(duì)文字信息的加密,在傳輸過程中增強(qiáng)了信息的隱蔽性,從而避免破解者反編譯破解,提高了數(shù)據(jù)的安全性。
附圖說明
圖1為本發(fā)明實(shí)施例一提供的信息加密的方法流程示意圖;
圖2為本發(fā)明實(shí)施例二提供的信息解密的方法流程示意圖;
圖3為本發(fā)明實(shí)施例一提供的信息加密的裝置結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例二提供的信息解密的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了在加密信息時(shí),增強(qiáng)信息的隱蔽性,避免信息容易被破解,提高數(shù)據(jù)的安全性,本發(fā)明提供了一種信息加、解密的方法及裝置,所述加密方法包括:獲取待加密信息的明文信息;將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼;將所字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息;根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為至少一組顏色值;通過所述至少一組顏色值生成圖像,所述圖像即為對(duì)所述明文信息進(jìn)行加密的加密結(jié)果。
下面通過附圖及具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說明。
實(shí)施例一
本實(shí)施例提供一種信息加密的方法,如圖1所示,所述加密方法包括:
S101,獲取待加密信息的明文信息。
本步驟中,在對(duì)信息加密之前,首先需要獲取待加密信息的明文信,所述待加密信息可以是通過用戶輸入獲取,也可以是系統(tǒng)直接給予;所述待加密信息包括文字信息。
S102,將所述明文信息轉(zhuǎn)換為字符編碼。
本步驟中,獲取到待加密信息的明文信息后,由于明文信息有各種編碼的信息,有可能會(huì)有中文,英文,其他文字,為了將各國(guó)文字都可以轉(zhuǎn)為統(tǒng)一的編碼格式,防止出現(xiàn)亂碼,或者識(shí)別不到的情況,將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼。
本實(shí)施例中,具體是將所述明文信息轉(zhuǎn)為base64編碼,base64編碼要求把3個(gè)8位字節(jié)(3*8=24)轉(zhuǎn)化為4個(gè)6位的字節(jié)(4*6=24),之后在6位的前面補(bǔ)兩個(gè)0,形成8位一個(gè)字節(jié)的形式。如果剩下的字符不足3個(gè)字節(jié),則用0填充,輸出字符使用'=',因此編碼后輸出的文本末尾可能會(huì)出現(xiàn)1或2個(gè)'='。
所以,將明文信息轉(zhuǎn)換為字符編碼后,將會(huì)出現(xiàn)英文字母,數(shù)字,+,/,=這些字符的混合字符串編碼。
S103,將所字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息。
將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼后,因本實(shí)施例中是需要將字符編碼轉(zhuǎn)換為顏色值來填充圖像的,因此本步驟中還需將字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息,所述數(shù)字信息是指具體的數(shù)值。
本發(fā)明中是通過將base64編碼轉(zhuǎn)為unicode編碼,因unicode編碼格式的字符串是一個(gè)設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,因此unicode編碼是一段數(shù)字。
這里,由于base64編碼是由英文字母,數(shù)字和+,/,=組成的,因此不存在將其轉(zhuǎn)換為unicode后會(huì)超出計(jì)算機(jī)二進(jìn)制最大數(shù)值65535的情況,因此,所有轉(zhuǎn)為unicode的編碼都將是小于65535的。
S104,根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為相至少一組顏色值。
本步驟中,將字符編碼轉(zhuǎn)換為數(shù)字信息后,每個(gè)字符編碼都會(huì)對(duì)應(yīng)一組數(shù)字信息,根據(jù)第一轉(zhuǎn)換規(guī)則將每組數(shù)字信息轉(zhuǎn)換為至少一組顏色值。
因?yàn)樵贏ndroid設(shè)備上,RGB顏色通常是由紅(R)、綠(G)、藍(lán)(B)三種顏色組成,每種顏色是有255種階層。因此,在本發(fā)明中,可以將數(shù)字信息按照RGB三種顏色分別表示出來;本實(shí)施例中,是通過將數(shù)字信息轉(zhuǎn)換為(R,G,B)顏色值來實(shí)現(xiàn)的。
具體地,以其中一組數(shù)字信息來說,首先確定所述數(shù)字信息的數(shù)值;確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)所述數(shù)值與R顏色對(duì)應(yīng)的最大階層確定所述R顏色的顏色值,并獲取第一剩余值;根據(jù)所述第一剩余數(shù)值與G顏色對(duì)應(yīng)最大的階層確定所述G顏色的顏色值,并獲取第二剩余值;基于所述第二剩余值確定所述B顏色的顏色值。將所述R顏色的顏色值、G顏色的顏色值及所述B顏色的顏色值進(jìn)行組合,獲取(R,G,B)顏色值。其他組數(shù)字信息可以按照同樣的方法獲取相應(yīng)的(R,G,B)顏色值。
本實(shí)施中每種顏色對(duì)應(yīng)的最大階層為255,那么就可以以255為進(jìn)制,與每組數(shù)字信息的數(shù)值進(jìn)行商除,確定每組數(shù)字信息對(duì)應(yīng)的(R,G,B)顏色值。
比如,當(dāng)一組數(shù)字信息的數(shù)值為1000時(shí),實(shí)現(xiàn)利用1000除以255得到的第一余數(shù)為235,那么R顏色的顏色值就為235;商為3,那么G顏色的顏色值為3;B顏色的顏色值為0;該組的(R,G,B)顏色塊的顏色值即為(235,3,0)。
依此為例,可以確定出每組數(shù)字信息的(R,G,B)顏色值。
S105,通過所述至少一組顏色值生成圖像。
本步驟中,當(dāng)所有的數(shù)字信息都轉(zhuǎn)換為相應(yīng)的(R,G,B)顏色值后,基于圖像的尺寸將相應(yīng)(R,G,B)顏色值寫入所述圖像中。
本實(shí)施例中,將一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊以一個(gè)像素來表示,每一個(gè)(R,G,B)顏色塊會(huì)保存在圖像中的一個(gè)像素中。
具體地,首先確定圖像的尺寸,本實(shí)施例中只需確定圖像的寬度即可,圖像的長(zhǎng)度是根據(jù)所有數(shù)字信息的數(shù)值來確定的,所述圖像的寬可以包括32,64,128,256,512,1024,可以根據(jù)自己的喜好來確定需要使用哪一種圖像的寬來繪制,如果數(shù)值一樣,選擇的圖像越寬,圖像的長(zhǎng)就越小,反之選擇的圖像寬度越窄,其生成圖像的長(zhǎng)就越大。
當(dāng)確定出圖像的寬后,根據(jù)公式(1)確定出圖像的長(zhǎng):
L1=A/W (1)
在公式(1)中,所述L1為圖像的長(zhǎng),所述A為數(shù)字信息的數(shù)值;所述W為圖像的寬。
當(dāng)圖像的尺寸確定好之后,確定寫入的第一基準(zhǔn)點(diǎn),從所述第一基準(zhǔn)點(diǎn)為起始位置,利用Android—ColorMatrix將相應(yīng)的(R,G,B)顏色值逐行寫入所述圖像中。
本實(shí)施例中是以所述圖像的左上角為第一基準(zhǔn)點(diǎn)(0,0)的,逐行將相應(yīng)的(R,G,B)顏色值寫入圖像中的。
寫入代碼具體為:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,左上角為第一基準(zhǔn)點(diǎn)(0,0),每個(gè)像素對(duì)應(yīng)的寬高坐標(biāo)為(x,y),從原點(diǎn)(0,0)開始寫,寫到第一行的末端,開始換寫第二行,直至將圖像寫滿。
寫入完成后,將生成的圖像保存到文件中,至此,由明文信息來生成信息圖像的工作已經(jīng)完成。
當(dāng)然,如果想讓生成的圖像更為復(fù)雜,更難破譯,還可以利用混淆算法設(shè)置混淆色塊,將所述混淆色塊寫入圖像中。
具體地,基于圖像的尺寸將(R,G,B)顏色塊的顏色值寫入所述圖像中之前,接收混淆數(shù)值,根據(jù)所述混淆數(shù)值隨機(jī)生成相應(yīng)數(shù)量的混淆色塊;基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置。比如,當(dāng)混淆數(shù)值為1時(shí),則隨機(jī)生成一個(gè)混淆色塊。當(dāng)混淆數(shù)值為2時(shí),則隨機(jī)生成兩個(gè)混淆色塊。
那么,這時(shí)通過所述至少一組顏色值生成圖像,具體包括:
確定寫入所述至少一組顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置,基于所述混淆色塊的數(shù)量及所述混淆色塊在所述圖像中的寫入位置,將所述至少一組顏色值與所述混淆色塊的顏色值依次寫入所述圖像中。
這里,基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置包括:基于所述混淆數(shù)值的數(shù)量確定每組所述寫入位置的數(shù)量;確定所述寫入位置的第二基準(zhǔn)點(diǎn);以所述第二基準(zhǔn)點(diǎn)為起始位置,每組寫入位置依次分布于兩組顏色值所對(duì)應(yīng)的顏色塊之間。
其中,所述寫入位置的第二基準(zhǔn)點(diǎn)一般為第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間的位置;當(dāng)然,第二基準(zhǔn)點(diǎn)也可以設(shè)置為其他位置點(diǎn),比如第二個(gè)(R,G,B)顏色塊和第三個(gè)(R,G,B)顏色塊之間的位置等。
比如,寫入位置的第二基準(zhǔn)點(diǎn)為第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊之間,當(dāng)混淆數(shù)值的數(shù)量為2個(gè)時(shí),寫入位置分別為:第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊之間、第二個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊與第三個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊之間的位置。
具體地,當(dāng)混淆色塊的寫入位置及數(shù)量都確定之后,首先確定所述(R,G,B)顏色值對(duì)應(yīng)的顏色塊與所述混淆色塊的數(shù)字信息的實(shí)際數(shù)值;這里,可以根據(jù)公式(2)計(jì)算所述實(shí)際數(shù)值:
Q=A*(x+1) (2)
公式(2)中,所述Q為實(shí)際數(shù)值,所述x為混淆數(shù)值。
當(dāng)確定好實(shí)際數(shù)值后,確定圖像的尺寸,同樣,只需確定圖像的寬度即可,圖像的長(zhǎng)度是根據(jù)所有數(shù)字信息的數(shù)值來確定的,所述圖像的寬可以包括32,64,128,256,512,1024,可以根據(jù)自己的喜好來確定需要使用哪一種圖像的寬來繪制,如果數(shù)值一樣,選擇的圖像越寬,圖像的長(zhǎng)就越小,反之選擇的圖像寬度越窄,其生成圖像的長(zhǎng)就越大。
當(dāng)確定出圖像的寬后,根據(jù)公式(3)確定出圖像的長(zhǎng):
L2=Q/W (3)
在公式(1)中,所述L2為圖像的長(zhǎng),所述Q為實(shí)際數(shù)值;所述W為圖像的寬。這里,當(dāng)公式(3)有余數(shù)時(shí),則將余數(shù)的(R,G,B)顏色值設(shè)置為(255,255,255),用以作為填充占位的內(nèi)容。
當(dāng)圖像的尺寸確定好之后,同樣確定寫入的第一基準(zhǔn)點(diǎn),以所述第一基準(zhǔn)點(diǎn)為起始位置,利用Android—ColorMatrix將相應(yīng)的(R,G,B)顏色值及混淆色塊的顏色值逐行依次寫入所述圖像中。這里,同樣是以所述圖像的左上角為第一基準(zhǔn)點(diǎn)(0,0)的。
寫入代碼具體為:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,將寫入位置的第二基準(zhǔn)點(diǎn)為第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間,當(dāng)混淆數(shù)值的數(shù)量為2個(gè)時(shí),寫入位置分別為:第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間、第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第三個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間的位置。
這兩個(gè)混淆數(shù)值均為1,可以以(1,1)來表示,以左上角為第一基準(zhǔn)點(diǎn)(0,0),每個(gè)像素對(duì)應(yīng)的寬高坐標(biāo)為(x,y),從第一基準(zhǔn)點(diǎn)(0,0)開始寫,將第一個(gè)(R,G,B)顏色值寫入之后,接著寫入一個(gè)混淆色塊的顏色值,接著寫入第二個(gè)(R,G,B)顏色值,將第二個(gè)(R,G,B的顏色值寫完之后,接著再寫一個(gè)混淆色塊的顏色值,依次類推,寫到第一行的末端,開始換寫第二行,直至將圖像寫滿。
寫入完成后,將生成的圖像保存到文件中,至此,混有混淆色塊的圖像寫入工作完成。
本實(shí)施例中,混淆數(shù)值越大,生成的圖像也就越復(fù)雜。
實(shí)施例二
相應(yīng)于實(shí)施例一,本實(shí)施例還提供一種信息解密的方法,如圖2所示,所述方法包括:
S201,從圖像中讀取至少一組顏色值,所述圖像為對(duì)明文信息進(jìn)行加密的加密結(jié)果。
本步驟中,從圖像中讀取至少一組顏色值,包括:接收混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的隨機(jī)生成的混淆色塊的數(shù)量;
基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置;
確定寫入所述顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置遍歷所述圖像,在遍歷過程中,基于所述混淆色塊的數(shù)量及在所述混淆色塊在所述圖像中的寫入位置跳過所述混淆色塊,讀取所述至少一組顏色值。
具體地,獲取圖像的長(zhǎng)度、寬度和第一基準(zhǔn)點(diǎn),基于所述圖像的長(zhǎng)度和寬度從第一基準(zhǔn)點(diǎn)(0,0)為起始位置開始逐行遍歷所述圖像,讀取各個(gè)(R,G,B)顏色塊的顏色值。
如果圖像中設(shè)置有混淆色塊,會(huì)根據(jù)接收到的混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的混淆色塊的數(shù)量;基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置;遍歷所述圖像時(shí),基于所述混淆色塊的數(shù)量及所述圖像中的寫入位置跳過所述混淆色塊。
這里,讀取各個(gè)(R,G,B)顏色值的代碼如下:
int color=bitmap.getPixel(x,y);//獲取當(dāng)前點(diǎn)的顏色信息
int r=Color.red(color);//分析出顏色中的R的值
int g=Color.green(color);//分析出顏色中的G的值
int b=Color.blue(color);//分析出顏色中的B的值
用以上代碼可以得到每個(gè)(R,G,B)顏色值,(x,y)是之前得到的每個(gè)(R,G,B)所述像素的寬高坐標(biāo),讀取到各個(gè)(R,G,B)顏色值后,將各個(gè)(R,G,B)顏色值存入已經(jīng)初始化的列表中,并進(jìn)行之后的轉(zhuǎn)碼。如果在獲取顏色值的過程中,獲取到了R、G、B的顏色值都是255時(shí),則代碼該位是占位符,排除掉該值。
如果圖像中沒有混淆色塊,則按照上述方法直接讀取即可獲得相應(yīng)的R,G,B)顏色值。
S202,根據(jù)第二轉(zhuǎn)換規(guī)則將所述至少一組顏色值轉(zhuǎn)換為數(shù)字信息。
本步驟中,當(dāng)將各個(gè)(R,G,B)顏色值都讀取到之后,根據(jù)第二轉(zhuǎn)換規(guī)則將相應(yīng)的(R,G,B)顏色值轉(zhuǎn)換為數(shù)字信息。
具體地,確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)公式(4)計(jì)算出所述數(shù)字信息的數(shù)值A(chǔ):
A=(B*C+G)*C+R (4)
本實(shí)施例中,所述每種顏色對(duì)應(yīng)的最大階層相同,所述C為所述每種顏色對(duì)應(yīng)的最大階層,RGB顏色通常是由紅(R)、綠(G)、藍(lán)(B)三種顏色組成,每種顏色是有255種階層,也就是說公式(3)中C的值為255。當(dāng)將每個(gè)(R,G,B)顏色值的數(shù)字信息的數(shù)值確定出之后,將各組數(shù)字信息進(jìn)行拼接形成一完整的數(shù)字信息,將所述數(shù)字信息存儲(chǔ)至列表集合中。
本實(shí)施例中,因unicode編碼格式的字符串是一個(gè)設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,因此unicode編碼是一段數(shù)字。所以本實(shí)施例是將顏色值轉(zhuǎn)換為unicode編碼實(shí)現(xiàn)顏色值到數(shù)字信息的轉(zhuǎn)換。
S203,將所述數(shù)字信息轉(zhuǎn)換為字符編碼。
本步驟中,獲取到數(shù)字信息后,還需要將數(shù)字信息轉(zhuǎn)換為字符編碼,具體是將unicode編碼轉(zhuǎn)換為base64的編碼:
unicode編碼轉(zhuǎn)換成base64的編碼,使用的方法如下:
使用上述代碼,返回的數(shù)據(jù)就是Base64的字符編碼數(shù)據(jù)了。
S204,將所述字符編碼轉(zhuǎn)換為所述明文信息。
本步驟中,在獲取到字符編碼后,利用代碼:
Base64.encodeToString(str.getBytes(),Base64.DEFAULT);
就可以將Base64的字符編碼轉(zhuǎn)換為明文信息了。
這樣,就完成了解密過程。
實(shí)施例三
相應(yīng)于實(shí)施例一,本實(shí)施例提供一種信息加密的裝置,如圖3所示,所述裝置包括:獲取單元31、第一轉(zhuǎn)換單元32、第二轉(zhuǎn)換單元33、第三轉(zhuǎn)換單元34及生成單元35;其中,
所述獲取單元31用于獲取待加密信息的明文信息。具體地,在對(duì)信息加密之前,首先需要獲取待加密信息的明文信,所述待加密信息可以是通過用戶輸入獲取,也可以是系統(tǒng)直接給予;所述待加密信息包括文字信息。
當(dāng)所述獲取單元31獲取到明文信息后,所述第一轉(zhuǎn)換單元32用于將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼;具體地,由于明文信息有各種編碼的信息,有可能會(huì)有中文,英文,其他文字,為了將各國(guó)文字都可以轉(zhuǎn)為統(tǒng)一的編碼格式,防止出現(xiàn)亂碼,或者識(shí)別不到的情況,將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼。
本實(shí)施例中,具體是第一轉(zhuǎn)換單元32將所述明文信息轉(zhuǎn)為base64編碼,base64編碼要求把3個(gè)8位字節(jié)(3*8=24)轉(zhuǎn)化為4個(gè)6位的字節(jié)(4*6=24),之后在6位的前面補(bǔ)兩個(gè)0,形成8位一個(gè)字節(jié)的形式。如果剩下的字符不足3個(gè)字節(jié),則用0填充,輸出字符使用'=',因此編碼后輸出的文本末尾可能會(huì)出現(xiàn)1或2個(gè)'='。
所以,將明文信息轉(zhuǎn)換為字符編碼后,將會(huì)出現(xiàn)英文字母,數(shù)字,+,/,=這些字符的混合字符串編碼。
當(dāng)所述第一轉(zhuǎn)換單元32將明文信息統(tǒng)一轉(zhuǎn)換為字符編碼后,所述第二轉(zhuǎn)換單元33用于將所述字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息;具體地,因本實(shí)施例中是需要將字符編碼轉(zhuǎn)換為顏色值來填充圖像的,因此所述第二轉(zhuǎn)換單元33還需將字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息,所述數(shù)字信息是指具體的數(shù)值。
本發(fā)明中是通過將base64編碼轉(zhuǎn)為unicode編碼,因unicode編碼格式的字符串是一個(gè)設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,因此unicode編碼是一段數(shù)字。
這里,由于base64編碼是由英文字母,數(shù)字和+,/,=組成的,因此不存在將其轉(zhuǎn)換為unicode后會(huì)超出計(jì)算機(jī)二進(jìn)制最大數(shù)值65535的情況,因此,所有轉(zhuǎn)為unicode的編碼都將是小于65535的。
當(dāng)所述第二轉(zhuǎn)換單元33將所述字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息后,第三轉(zhuǎn)換單元34用于根據(jù)第一轉(zhuǎn)換規(guī)則將每數(shù)量字信息轉(zhuǎn)換為相應(yīng)的(R,G,B)顏色塊。
具體地,在Android設(shè)備上,RGB顏色通常是由紅(R)、綠(G)、藍(lán)(B)三種顏色組成,每種顏色是有255種階層。因此,在本發(fā)明中,可以將數(shù)字信息按照RGB三種顏色分別表示出來。
具體地,第三轉(zhuǎn)換單元34確定所述數(shù)字信息的數(shù)值;第三轉(zhuǎn)換單元34確定每種顏色對(duì)應(yīng)的最大階層,根據(jù)所述數(shù)值與R顏色對(duì)應(yīng)的最大階層確定所述R顏色的顏色值,并獲取第一剩余數(shù)值;根據(jù)所述第一剩余數(shù)值與G顏色對(duì)應(yīng)最大的階層確定所述G顏色的顏色值,并獲取第二剩余數(shù)值;基于所述第二剩余數(shù)值確定所述B顏色的顏色值。將所述R顏色的顏色值、G顏色的顏色值及所述B顏色的顏色值進(jìn)行組合,獲取(R,G,B)顏色值。其他組數(shù)字信息可以按照同樣的方法獲取相應(yīng)的(R,G,B)顏色值。
本實(shí)施中每種顏色對(duì)應(yīng)的最大階層為255,那么就可以以255為進(jìn)制,與每組數(shù)字信息的數(shù)值進(jìn)行商除,確定每組數(shù)字信息對(duì)應(yīng)的(R,G,B)顏色值。
比如,當(dāng)一組數(shù)字信息的數(shù)值為1000時(shí),實(shí)現(xiàn)利用1000除以255得到的第一余數(shù)為235,那么R顏色的顏色值就為235;商為3,那么G顏色的顏色值為3;B顏色的顏色值為0;該組的(R,G,B)顏色值即為(235,3,0)。
當(dāng)所述第三轉(zhuǎn)換單元34根據(jù)第一轉(zhuǎn)換規(guī)則將每組數(shù)字信息轉(zhuǎn)換為相應(yīng)的(R,G,B)顏色值后,生成單元35用于通過所述至少一組顏色值生成圖像。具體地,本實(shí)施例中,將一個(gè)(R,G,B)顏色塊以一個(gè)像素來表示,每一個(gè)(R,G,B)顏色塊會(huì)保存在圖像中的一個(gè)像素中。
具體地,生成單元35首先確定圖像的尺寸,本實(shí)施例中只需確定圖像的寬度即可,圖像的長(zhǎng)度是根據(jù)所有數(shù)字信息的數(shù)值來確定的,所述圖像的寬可以包括32,64,128,256,512,1024,可以根據(jù)自己的喜好來確定需要使用哪一種圖像的寬來繪制,如果數(shù)值一樣,選擇的圖像越寬,圖像的長(zhǎng)就越小,反之選擇的圖像寬度越窄,其生成圖像的長(zhǎng)就越大。
當(dāng)確定出圖像的寬后,生成單元35根據(jù)公式(1)確定出圖像的長(zhǎng):
L1=A/W (1)
在公式(1)中,所述L1為圖像的長(zhǎng),所述A為數(shù)字信息的數(shù)值;所述W為圖像的寬。
當(dāng)圖像的尺寸確定好之后,確定寫入的第一基準(zhǔn)點(diǎn),從所述第一基準(zhǔn)點(diǎn)為起始位置,利用Android—ColorMatrix將相應(yīng)的(R,G,B)顏色值逐行寫入所述圖像中。
本實(shí)施例中是以所述圖像的左上角為第一基準(zhǔn)點(diǎn)(0,0)的,逐行將相應(yīng)的(R,G,B)顏色值寫入圖像中的。
寫入代碼具體為:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,左上角為第一基準(zhǔn)點(diǎn)(0,0),每個(gè)像素對(duì)應(yīng)的寬高坐標(biāo)為(x,y),從原點(diǎn)(0,0)開始寫,寫到第一行的末端,開始換寫第二行,直至將圖像寫滿。
寫入完成后,將生成的圖像保存到文件中,至此,由明文信息來生成信息圖像的工作已經(jīng)完成。
當(dāng)然,如果想讓生成的圖像更為復(fù)雜,更難破譯,還可以利用混淆算法設(shè)置混淆色塊,將所述混淆色塊寫入圖像中。
具體地,基于圖像的尺寸將(R,G,B)顏色塊的顏色值寫入所述圖像中之前,接收混淆數(shù)值,根據(jù)所述混淆數(shù)值隨機(jī)生成相應(yīng)數(shù)量的混淆色塊;基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置。比如,當(dāng)混淆數(shù)值為1時(shí),則隨機(jī)生成一個(gè)混淆色塊。當(dāng)混淆數(shù)值為2時(shí),則隨機(jī)生成兩個(gè)混淆色塊。
那么,這時(shí)通過所述至少一組顏色值生成圖像,具體包括:
確定寫入所述至少一組顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置,基于所述混淆色塊的數(shù)量及所述混淆色塊在所述圖像中的寫入位置,將所述至少一組顏色值與所述混淆色塊的顏色值依次寫入所述圖像中。
這里,基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置包括:基于所述混淆數(shù)值的數(shù)量確定每組所述寫入位置的數(shù)量;確定所述寫入位置的第二基準(zhǔn)點(diǎn);以所述第二基準(zhǔn)點(diǎn)為起始位置,每組寫入位置依次分布于兩組顏色值所對(duì)應(yīng)的顏色塊之間。
其中,所述寫入位置的第二基準(zhǔn)點(diǎn)一般為第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間的位置;當(dāng)然,第二基準(zhǔn)點(diǎn)也可以設(shè)置為其他位置點(diǎn),比如第二個(gè)(R,G,B)顏色塊和第三個(gè)(R,G,B)顏色塊之間的位置等。
比如,寫入位置的第二基準(zhǔn)點(diǎn)為第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊之間,當(dāng)混淆數(shù)值的數(shù)量為2個(gè)時(shí),寫入位置分別為:第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊之間、第二個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊與第三個(gè)顏色值對(duì)應(yīng)的(R,G,B)顏色塊之間的位置。
具體地,當(dāng)混淆色塊的寫入位置及數(shù)量都確定之后,首先確定所述(R,G,B)顏色值對(duì)應(yīng)的顏色塊與所述混淆色塊的數(shù)字信息的實(shí)際數(shù)值;這里,可以根據(jù)公式(2)計(jì)算所述實(shí)際數(shù)值:
Q=A*(x+1) (2)
公式(2)中,所述Q為實(shí)際數(shù)值,所述x為混淆數(shù)值。
當(dāng)確定好實(shí)際數(shù)值后,確定圖像的尺寸,同樣,只需確定圖像的寬度即可,圖像的長(zhǎng)度是根據(jù)所有數(shù)字信息的數(shù)值來確定的,所述圖像的寬可以包括32,64,128,256,512,1024,可以根據(jù)自己的喜好來確定需要使用哪一種圖像的寬來繪制,如果數(shù)值一樣,選擇的圖像越寬,圖像的長(zhǎng)就越小,反之選擇的圖像寬度越窄,其生成圖像的長(zhǎng)就越大。
當(dāng)確定出圖像的寬后,根據(jù)公式(3)確定出圖像的長(zhǎng):
L2=Q/W (3)
在公式(1)中,所述L2為圖像的長(zhǎng),所述Q為實(shí)際數(shù)值;所述W為圖像的寬。這里,當(dāng)公式(3)有余數(shù)時(shí),則將余數(shù)的(R,G,B)顏色值設(shè)置為(255,255,255),用以作為填充占位的內(nèi)容。
當(dāng)圖像的尺寸確定好之后,同樣確定寫入的第一基準(zhǔn)點(diǎn),以所述第一基準(zhǔn)點(diǎn)為起始位置,利用Android—ColorMatrix將相應(yīng)的(R,G,B)顏色值及混淆色塊的顏色值逐行依次寫入所述圖像中。這里,同樣是以所述圖像的左上角為第一基準(zhǔn)點(diǎn)(0,0)的。
寫入代碼具體為:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,將寫入位置的第二基準(zhǔn)點(diǎn)為第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間,當(dāng)混淆數(shù)值的數(shù)量為2個(gè)時(shí),寫入位置分別為:第一個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間、第二個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊與第三個(gè)(R,G,B)顏色值對(duì)應(yīng)的顏色塊之間的位置。
這兩個(gè)混淆數(shù)值均為1,可以以(1,1)來表示,以左上角為第一基準(zhǔn)點(diǎn)(0,0),每個(gè)像素對(duì)應(yīng)的寬高坐標(biāo)為(x,y),從第一基準(zhǔn)點(diǎn)(0,0)開始寫,將第一個(gè)(R,G,B)顏色值寫入之后,接著寫入一個(gè)混淆色塊的顏色值,接著寫入第二個(gè)(R,G,B)顏色值,將第二個(gè)(R,G,B的顏色值寫完之后,接著再寫一個(gè)混淆色塊的顏色值,依次類推,寫到第一行的末端,開始換寫第二行,直至將圖像寫滿。
寫入完成后,將生成的圖像保存到文件中,至此,混有混淆色塊的圖像寫入工作完成。
實(shí)施例四
相應(yīng)于實(shí)施例二,本實(shí)施例還提供一種信息解密的裝置,如圖4所示,所述裝置包括:讀取單元41、第四轉(zhuǎn)換單元42、第五轉(zhuǎn)換單元43及第六轉(zhuǎn)換單元44;其中,
所述讀取單元41用于從圖像中讀取至少一組顏色值,所述圖像為對(duì)明文信息進(jìn)行加密的加密結(jié)果。
所述讀取單元41從圖像中讀取至少一組顏色值,包括:所述讀取單元41接收混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的隨機(jī)生成的混淆色塊的數(shù)量;
基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置;
確定寫入所述顏色值的第一基準(zhǔn)點(diǎn);
以所述第一基準(zhǔn)點(diǎn)為起始位置遍歷所述圖像,在遍歷過程中,基于所述混淆色塊的數(shù)量及在所述混淆色塊在所述圖像中的寫入位置跳過所述混淆色塊,讀取所述至少一組顏色值。
具體地,所述讀取單元41獲取圖像的長(zhǎng)度、寬度和第一基準(zhǔn)點(diǎn),基于所述圖像的長(zhǎng)度和寬度從第一基準(zhǔn)點(diǎn)(0,0)為起始位置開始逐行遍歷所述圖像,讀取各個(gè)(R,G,B)顏色塊的顏色值。
如果圖像中設(shè)置有混淆色塊,會(huì)根據(jù)接收到的混淆數(shù)值,根據(jù)所述混淆數(shù)值確定的混淆色塊的數(shù)量;基于混淆算法確定所述混淆色塊在所述圖像中的寫入位置;遍歷所述圖像時(shí),基于所述混淆色塊的數(shù)量及所述圖像中的寫入位置跳過所述混淆色塊。
這里,讀取各個(gè)(R,G,B)顏色值的代碼如下:
int color=bitmap.getPixel(x,y);//獲取當(dāng)前點(diǎn)的顏色信息
int r=Color.red(color);//分析出顏色中的R的值
int g=Color.green(color);//分析出顏色中的G的值
int b=Color.blue(color);//分析出顏色中的B的值
用以上代碼可以得到每個(gè)(R,G,B)顏色值,(x,y)是之前得到的每個(gè)(R,G,B)所述像素的寬高坐標(biāo),讀取到各個(gè)(R,G,B)顏色值后,將各個(gè)(R,G,B)顏色值存入已經(jīng)初始化的列表中,并進(jìn)行之后的轉(zhuǎn)碼。如果在獲取顏色值的過程中,獲取到了R、G、B的顏色值都是255時(shí),則代碼該位是占位符,排除掉該值。
如果圖像中沒有混淆色塊,則按照上述方法直接讀取即可獲得相應(yīng)的R,G,B)顏色值。
當(dāng)所述相應(yīng)的(R,G,B)顏色塊的顏色值獲取到之后,第四轉(zhuǎn)換單元42用于根據(jù)第二轉(zhuǎn)換規(guī)則將相應(yīng)的(R,G,B)顏色值轉(zhuǎn)換為數(shù)字信息。
具體地,確定每種顏色對(duì)應(yīng)的最大階層,第四轉(zhuǎn)換單元42根據(jù)公式(4)計(jì)算出所述數(shù)字信息的數(shù)值A(chǔ):
A=(B*C+G)*C+R (4)
本實(shí)施例中,所述每種顏色對(duì)應(yīng)的最大階層相同,所述C為所述每種顏色對(duì)應(yīng)的最大階層,RGB顏色通常是由紅(R)、綠(G)、藍(lán)(B)三種顏色組成,每種顏色是有255種階層,也就是說公式(3)中C的值為255。當(dāng)將每個(gè)(R,G,B)顏色值的數(shù)字信息的數(shù)值確定出之后,將各組數(shù)字信息進(jìn)行拼接形成一完整的數(shù)字信息,將所述數(shù)字信息存儲(chǔ)至列表集合中。
本實(shí)施例中,因unicode編碼格式的字符串是一個(gè)設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,因此unicode編碼是一段數(shù)字。所以本實(shí)施例是將顏色值轉(zhuǎn)換為unicode編碼實(shí)現(xiàn)顏色值到數(shù)字信息的轉(zhuǎn)換。
當(dāng)獲取到數(shù)字信息后,第五轉(zhuǎn)換單元43用于將所述數(shù)字信息轉(zhuǎn)換為字符編碼。
具體地,本實(shí)施例中,第五轉(zhuǎn)換單元43是將unicode編碼轉(zhuǎn)換為base64的編碼:
轉(zhuǎn)換代碼如下:
第五轉(zhuǎn)換單元43使用上述代碼,返回的數(shù)據(jù)就是Base64的字符編碼數(shù)據(jù)了。
當(dāng)獲取到字符編碼后,所述第六轉(zhuǎn)換單元44用于將所述字符編碼轉(zhuǎn)換為所述明文信息。
在獲取到字符編碼后,所述第六轉(zhuǎn)換單元44利用代碼:
Base64.encodeToString(str.getBytes(),Base64.DEFAULT);
就可以將Base64的字符編碼轉(zhuǎn)換為明文信息了。
這樣,就完成了解密過程。
本發(fā)明中的一個(gè)或多個(gè)實(shí)施例帶來的有益效果是:
一種信息加、解密的方法及裝置,所述加密方法包括:獲取待加密信息的明文信息;將所述明文信息統(tǒng)一轉(zhuǎn)換為字符編碼;將所字符編碼轉(zhuǎn)換為相應(yīng)的數(shù)字信息;根據(jù)第一轉(zhuǎn)換規(guī)則將所述數(shù)字信息轉(zhuǎn)換為至少一組顏色值;通過所述至少一組顏色值生成圖像,所述圖像即為對(duì)所述明文信息進(jìn)行加密的加密結(jié)果;這樣,就將文字信息轉(zhuǎn)換為圖像實(shí)現(xiàn)對(duì)文字信息的加密,在傳輸過程中增強(qiáng)了信息的隱蔽性,從而避免破解者反編譯破解,提高了數(shù)據(jù)的安全性。并且,如果想進(jìn)一步提高信息的隱蔽性,還可以設(shè)置混淆色塊,將混淆色塊一并寫入到圖像中,如果沒有正確的混淆數(shù)值,破譯出來后也只是一堆混亂的色塊而已,這樣就進(jìn)一步提高了數(shù)據(jù)的安全性。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。