摘 要:文章深入分析了BASE64算法的原理,并給出具體實(shí)現(xiàn)的算法程序,最后討論如何改進(jìn)BASE64算法,討論其在消防泵自動(dòng)巡檢系統(tǒng)中的應(yīng)用。
關(guān)鍵詞:BASE64;編碼;加密;消防泵
引言
目前,嵌入式技術(shù)的飛速發(fā)展,實(shí)現(xiàn)消防給水設(shè)備的動(dòng)態(tài)監(jiān)測(cè)。消防泵自動(dòng)巡檢系統(tǒng)在設(shè)定的時(shí)間周期內(nèi)自動(dòng)地啟動(dòng)消防泵,對(duì)消防泵的運(yùn)作進(jìn)行檢查,對(duì)發(fā)生問(wèn)題的消防泵進(jìn)行報(bào)警指示,能夠保證消防設(shè)備正常動(dòng)作[1]。在開(kāi)發(fā)消防泵自動(dòng)巡檢系統(tǒng)的過(guò)程中,既涉及到數(shù)據(jù)的安全,又關(guān)系到控制器處理能力與系統(tǒng)運(yùn)行速度等多方面的問(wèn)題?;诎踩紤]必須對(duì)系統(tǒng)參數(shù)和歷史巡檢記錄進(jìn)行加密,還能正確解密出來(lái)顯示供值班員查看歷史記錄。文章提出一種使用改進(jìn)的BASE64算法應(yīng)用到消防泵自動(dòng)巡檢系統(tǒng)中。既能保留BASE64算法的高效優(yōu)點(diǎn),又能提高解密的難度[2]。
1 BASE64編碼與解碼原理
1.1 定義
按照RFC2045的定義,BASE64被定義為:BASE64內(nèi)容傳送編碼被設(shè)計(jì)用來(lái)把任意序列的8位字節(jié)描述為一種不易被人直接識(shí)別的形式。BASE64常用于在通常處理文本數(shù)碼的場(chǎng)合,表示、傳輸、存儲(chǔ)一些二進(jìn)制數(shù)據(jù)。
1.2 BASE64編碼原理
BASE64編碼原理[3]是:首先,把3個(gè)字節(jié)的數(shù)據(jù)放入一個(gè)24位的緩沖區(qū)中;然后,從緩沖區(qū)最高位開(kāi)始連續(xù)截取6位二進(jìn)制,再在這6位二進(jìn)制數(shù)的高位添加兩個(gè)0組成一個(gè)新字節(jié);再接著連續(xù)截取6位二進(jìn)制,再添加兩個(gè)0組成第二個(gè)新字節(jié);依此類(lèi)推,直到24位二進(jìn)制全部被截取完畢,共截取出4個(gè)新字節(jié);最后,把4個(gè)新字節(jié)作為索引從BASE64編碼表中查出編碼字符作為密文,如表1所示。對(duì)于明文不足3個(gè)字節(jié)的情況,以字節(jié)0補(bǔ)上,按BASE64編碼后使用字符“=”作為密文。
從BASE64編碼原理可知,把3個(gè)字節(jié)轉(zhuǎn)換成4個(gè)字節(jié),編碼后數(shù)據(jù)容量至少增加33.3%。按消防泵自動(dòng)巡檢系統(tǒng)的運(yùn)行要求,計(jì)算保存歷史巡檢記錄的內(nèi)存卡的容量?,F(xiàn)在設(shè)每天保存明文數(shù)據(jù)的容量為A,系統(tǒng)設(shè)計(jì)運(yùn)行周期為T(mén)年,每年按366天計(jì)算,則內(nèi)存卡的容量B=A×1.33×T×366。當(dāng)A=1.8M字節(jié),T=3年時(shí),則容量B=2.5G字節(jié)。因此,消防泵自動(dòng)巡檢系統(tǒng)的SD內(nèi)存卡選用4G容量,預(yù)計(jì)可以同時(shí)保存4.8年的歷史巡檢記錄。
表1 BASE64編碼表
1.3 BASE64解碼原理
BASE64解碼原理是:首先,從密文中取出4個(gè)字節(jié),從BASE64解碼表中查出其索引值;然后,把4個(gè)字節(jié)的索引值的低6位二進(jìn)制放入一個(gè)24位的緩沖區(qū)中;接著,從緩沖區(qū)的最高位開(kāi)始連續(xù)截取8位二進(jìn)制,組成一個(gè)新字節(jié);依些類(lèi)推,直到24位二進(jìn)制全部被截取完畢,共截取出3個(gè)新字節(jié)。這3個(gè)新字節(jié)就是明文。
2 改進(jìn)的BASE64編碼與解碼原理
破解密碼的常用方法是逐一運(yùn)用不同加密算法的解碼程序。對(duì)于本系統(tǒng)使用BASE64編碼的密文,是很容易被破解的。為了能夠提高破解的難度,需要先分析一下BASE64編碼的工作原理和特點(diǎn)。BASE64編碼有三個(gè)明顯的特點(diǎn):(1)按BASE64編碼表進(jìn)行置換字符;(2)明文不足3字節(jié)時(shí),編碼后使用字符“=”作為密文;(3)編碼容量至少增加33.3%。
因?yàn)锽ASE64算法只應(yīng)用到消防泵自動(dòng)巡檢系統(tǒng)中,不會(huì)出現(xiàn)類(lèi)似像“/”字符是控制字符,并不能通過(guò)計(jì)算機(jī)顯示出來(lái),在某些場(chǎng)合就不能使用了”的問(wèn)題[4]。針對(duì)這三個(gè)特點(diǎn),提出四個(gè)改進(jìn)的方案:
方案一:利用置換字符的原理,重新制作BASE64編碼表和解碼表,可以打亂標(biāo)準(zhǔn)編碼表中的字符,也可以更換成其它字符。破解者需要積累完整的64字節(jié)的BASE64編碼表,才能完全破解本算法。
方案二:在第二個(gè)特點(diǎn)中不使用字符“=”,改用其它字符,例如“$”。
方案三:在明文的前或后增加密鑰字符串,再進(jìn)行BASE64算法。并且準(zhǔn)備多套密鑰輪換使用,又會(huì)提高破解難度。
方案四:在BASE64編碼過(guò)程中,每3個(gè)明文字節(jié)產(chǎn)生4個(gè)新字節(jié),再按順序把4個(gè)新字節(jié)排列起來(lái)。如果打亂這4個(gè)新字節(jié)的排列順序,又會(huì)得到新的密文。把4個(gè)新字節(jié)進(jìn)行全排列,共有P44=4×3×2×1=24種情況。
方案五:對(duì)明文進(jìn)行多次BASE64算法,但是考慮第三個(gè)特點(diǎn),次數(shù)不宜太多。應(yīng)用兩次至少增加77.8%,應(yīng)用三次至少增加137%,建議不要超過(guò)兩次。
按照本系統(tǒng)的運(yùn)行需要,同時(shí)使用方案一、二、三、四。破解算法者需要先認(rèn)定本算法源自于BASE64算法,再考慮到這五種方案,才有可能破解本算法??梢?jiàn),破解本算法的難度會(huì)被大大提高。
3 結(jié)束語(yǔ)
文章提出的改進(jìn)的BASE64算法應(yīng)用到消防泵自動(dòng)巡檢系統(tǒng)中,不單保留BASE64算法的優(yōu)點(diǎn),同時(shí)提高破解算法的難度。實(shí)踐應(yīng)用表明,系統(tǒng)已經(jīng)運(yùn)行幾個(gè)月,非常穩(wěn)定和可靠。改進(jìn)的BASE64算法簡(jiǎn)單易用,也可以應(yīng)用到其它嵌入式產(chǎn)品中。
參考文獻(xiàn)
[1]中華人民共和國(guó)公安部.GB50016-2006建筑設(shè)計(jì)防火規(guī)范[S].北京:中國(guó)計(jì)劃出版社,2006.
[2]韓宇貞,朱華生.基于BASE64編碼的數(shù)據(jù)加密技術(shù)[J].南昌水專(zhuān)學(xué)報(bào),2002,21(4):38-40.
[3]楊智,王鳳琴,王麗琴.在VB6.0中實(shí)現(xiàn)BASE64編碼/解碼[J].計(jì)算機(jī)應(yīng)用,2000(9):28-30.
[4]唐武生,田立紅,曹偉.BASE64編碼的實(shí)現(xiàn)與應(yīng)用研究[J].長(zhǎng)春大學(xué)學(xué)報(bào),2006,16(2):69-72.
作者簡(jiǎn)介:梁文禎(1984,3-),男,籍貫:廣東省江門(mén)市,學(xué)歷:學(xué)位:工程碩士,職位:教師,職稱(chēng):講師,研究方向:嵌入式系統(tǒng)技術(shù)應(yīng)用以及自動(dòng)化控制。