巢喜劍
【摘 要】目前,計算機技術(shù)及網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,以及網(wǎng)絡(luò)帶來的便利性,促使人們對網(wǎng)絡(luò)的應(yīng)用越來越廣泛,在辦公、娛樂等各個方面對網(wǎng)絡(luò)都有不同程度的依賴,在應(yīng)用的同時,既涉及到數(shù)據(jù)的安全,又關(guān)系到網(wǎng)絡(luò)傳輸速度兩方面問題。基于安全考慮必須對所要傳輸?shù)臄?shù)據(jù)進行加密,國際上通用的公開算法有DES算法、RSA算法等,但這些算法實現(xiàn)起來有相當(dāng)?shù)膹?fù)雜性,特別RSA算法運算速度較慢,不適合一般辦公娛樂的需要。本文介紹了一種相對簡單有效的數(shù)據(jù)加密解密方法,本程序中的加密解密算法系統(tǒng)具有簡單的Base64加密解密功能。
【關(guān)鍵詞】網(wǎng)絡(luò)安全;DES算法和RSA算法;Base64加密解密
一、設(shè)計項目分析
1.1 需求分析。該項目沒有使用到數(shù)據(jù)庫,算法相對簡單,在深入研究Base64編碼原理和方案后,我們發(fā)現(xiàn)完全可以不采用標(biāo)準(zhǔn)固定編碼表,而采用自定義的編碼表,這樣我們可以將屬于自己的編碼表當(dāng)作密鑰的方法,來實現(xiàn)文件的編碼,這樣編碼后的文件能夠很好地在網(wǎng)絡(luò)上傳輸,同時,只有知道密鑰的解碼器,才能正確解碼出文件的真實內(nèi)容,達到了保密的作用,從而在一定程度上使得文件在網(wǎng)絡(luò)上傳輸方便快捷、安全可靠。
1.2 實現(xiàn)目標(biāo)。1、設(shè)計加密算法(可以簡單或復(fù)雜),對輸入明文加密,同時將密文對比顯示出來。2、設(shè)計解密算法,將密文利用解密算法還原為明文,同時將原始明文、密文和解密后明文對比顯示。
二、系統(tǒng)設(shè)計
2.1 模型分析。Base64編碼的解碼過程是加密過程逆向過程,采用標(biāo)準(zhǔn)編碼表Base64編碼的方法使得經(jīng)過Base64編碼的文件能被所有采用標(biāo)準(zhǔn)編碼表的Base64解碼器解碼,恢復(fù)文件的本來內(nèi)容。具體的解密過程如下:a.將得到的Base64編碼流轉(zhuǎn)化為二進制數(shù)據(jù)流;b.取出Base64 編碼流的一個字符;c.將這字符通過取編碼表值,轉(zhuǎn)化成6位二進制數(shù)據(jù)流;d.重復(fù)b步驟,直到所有的Base64編碼流被取空;e.返回解碼的二進制數(shù)據(jù)流。不難看出采用標(biāo)準(zhǔn)編碼表Base64編碼的方法使得經(jīng)過Base64編碼的文件能被所有采用標(biāo)準(zhǔn)編碼表的Base64解碼器解碼,恢復(fù)文件的本來內(nèi)容,這樣編碼后的文件雖然可以在網(wǎng)絡(luò)上傳輸,但不具備網(wǎng)絡(luò)信息安全保密性能。
主要算法程序:
import org.apache.commons.codec.binary.Base64;
public abstract class Base64Coder {
/**
* 字符編碼
*/
public final static String ENCODING = "UTF-8";
/**
* Base64編碼
*
* @param data 待編碼數(shù)據(jù)
* @return String 編碼數(shù)據(jù)
* @throws Exception
*/
public static String encode(String data) throws Exception {
// 執(zhí)行編碼
byte[ ] b = Base64.encodeBase64(data.getBytes(ENCODING));
return new String(b, ENCODING);
}
/**
* Base64解碼
*
* @param data 待解碼數(shù)據(jù)
* @return String 解碼數(shù)據(jù)
* @throws Exception
*/
public static String decode(String data) throws Exception {
// 執(zhí)行解碼
byte[] b = Base64.decodeBase64(data.getBytes(ENCODING));
return new String(b, ENCODING);
}
}
2.2 流程分析。1、運行Java程序Base64Coder.java和Base64CoderTest.java進入加密解密界面。2、然后在框中輸入明文信息,點encode對明文進行加密。3、點擊decode對密文進行解密,明文密文對比顯示在界面上。4、點擊clear時,清除框中的明文和密文。
三、基于Java設(shè)計的加密和解密算法系統(tǒng)分析
通過對程序需求的分析,對其功能進行分析。首先,該程序采用C/S架構(gòu),由加密和解密算法組成。
為實現(xiàn)服務(wù)器的功能,需要建立以下兩個類:
1、算法主框架類:Base64Coder.java。算法類主要提供了具體算法。采用Base64編碼是數(shù)據(jù)庫加密的常用方式, 在數(shù)據(jù)庫內(nèi)能把二進制的數(shù)據(jù)編碼或者解碼成base64文本, 就可以用存儲過程從e-mail和HTTP服務(wù)器認證發(fā)送數(shù)據(jù)并解碼。在使用Base64處理中文的多語言時, 需要注意中文編碼的問題。如常用的中文編碼有GBK、GB2312和Unicode等。在處理Base64編碼時, 必須統(tǒng)一使用中文編碼。
2、編碼與解碼測試類:Base64CoderTest.java。包含界面顯示,編碼解碼實現(xiàn),完成加密解密功能。Base64編碼要求把3個8位字節(jié)轉(zhuǎn)化為4個6位的字節(jié),在6位的前面補兩個0,形成8位一個字節(jié)的形式。把8位的字節(jié)連成一串, 然后每次順序選6個出來,再把這6個二進制數(shù)前面再添加兩個0,就成了一個新的字節(jié)。之后再選出6個來, 再添加0,依此類推, 直到二進制數(shù)全部被選完。Base64有其自身的編碼表,如表1所示。Base64編碼方式并不是單純利用轉(zhuǎn)化完的內(nèi)容進行編碼。像‘\字符是控制字符, 并不能通過計算機顯示出來, 在某些場合就不能使用了。Base64編碼的結(jié)果不是根據(jù)算法把編碼變?yōu)楦邇晌皇?而低6位代表數(shù)據(jù),而是變?yōu)楸?的形式,如”A”就有7位, 而”a”就只有6位。編碼的編號對應(yīng)的是得出的新字節(jié)的十進制值。
3、為實現(xiàn)加密解密的功能,需要加一個界面窗口:提供了人機交互界面,方便對比顯示。
四、結(jié)束語
本文首先實現(xiàn)了加密解密算法的功能,應(yīng)用自定義編碼表的Base64編碼,無需更改編碼及解碼程序,只需簡單的自定義編碼表即可,因此,實現(xiàn)容易,在一定程度上提高了算法的安全性。程序可以有效地實現(xiàn)Base64編碼的加密與解密,比較清晰的顯示了整個Base64編碼加密與解密的過程,通俗易懂。程序在Windows XP下調(diào)試通過。
【參考文獻】
[1]史士英,李作緯.RSA快速算法的優(yōu)化研究[A].第九屆中國青年信息與管理學(xué)者大會論文集[C].2007.
[2]王瑩,何大軍.AES加密算法的改進與實現(xiàn)[J].電腦編程技巧與維護,2010(17).
[3]張維振.基于兩種加密算法的加密解密系統(tǒng)的設(shè)計與實現(xiàn)[D].電子科技大學(xué),2010.