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