基于Java语言设计的加密和解密算法系统
2014-04-29巢喜剑
巢喜剑
【摘 要】目前,计算机技术及网络技术的飞速发展,以及网络带来的便利性,促使人们对网络的应用越来越广泛,在办公、娱乐等各个方面对网络都有不同程度的依赖,在应用的同时,既涉及到数据的安全,又关系到网络传输速度两方面问题。基于安全考虑必须对所要传输的数据进行加密,国际上通用的公开算法有DES算法、RSA算法等,但这些算法实现起来有相当的复杂性,特别RSA算法运算速度较慢,不适合一般办公娱乐的需要。本文介绍了一种相对简单有效的数据加密解密方法,本程序中的加密解密算法系统具有简单的Base64加密解密功能。
【關键词】网络安全;DES算法和RSA算法;Base64加密解密
一、设计项目分析
1.1 需求分析。该项目没有使用到数据库,算法相对简单,在深入研究Base64编码原理和方案后,我们发现完全可以不采用标准固定编码表,而采用自定义的编码表,这样我们可以将属于自己的编码表当作密钥的方法,来实现文件的编码,这样编码后的文件能够很好地在网络上传输,同时,只有知道密钥的解码器,才能正确解码出文件的真实内容,达到了保密的作用,从而在一定程度上使得文件在网络上传输方便快捷、安全可靠。
1.2 实现目标。1、设计加密算法(可以简单或复杂),对输入明文加密,同时将密文对比显示出来。2、设计解密算法,将密文利用解密算法还原为明文,同时将原始明文、密文和解密后明文对比显示。
二、系统设计
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 {
// 执行编码
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 {
// 执行解码
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设计的加密和解密算法系统分析
通过对程序需求的分析,对其功能进行分析。首先,该程序采用C/S架构,由加密和解密算法组成。
为实现服务器的功能,需要建立以下两个类:
1、算法主框架类:Base64Coder.java。算法类主要提供了具体算法。采用Base64编码是数据库加密的常用方式, 在数据库内能把二进制的数据编码或者解码成base64文本, 就可以用存储过程从e-mail和HTTP服务器认证发送数据并解码。在使用Base64处理中文的多语言时, 需要注意中文编码的问题。如常用的中文编码有GBK、GB2312和Unicode等。在处理Base64编码时, 必须统一使用中文编码。
2、编码与解码测试类:Base64CoderTest.java。包含界面显示,编码解码实现,完成加密解密功能。Base64编码要求把3个8位字节转化为4个6位的字节,在6位的前面补两个0,形成8位一个字节的形式。把8位的字节连成一串, 然后每次顺序选6个出来,再把这6个二进制数前面再添加两个0,就成了一个新的字节。之后再选出6个来, 再添加0,依此类推, 直到二进制数全部被选完。Base64有其自身的编码表,如表1所示。Base64编码方式并不是单纯利用转化完的内容进行编码。像‘\字符是控制字符, 并不能通过计算机显示出来, 在某些场合就不能使用了。Base64编码的结果不是根据算法把编码变为高两位是0而低6位代表数据,而是变为表1的形式,如”A”就有7位, 而”a”就只有6位。编码的编号对应的是得出的新字节的十进制值。
3、为实现加密解密的功能,需要加一个界面窗口:提供了人机交互界面,方便对比显示。
四、结束语
本文首先实现了加密解密算法的功能,应用自定义编码表的Base64编码,无需更改编码及解码程序,只需简单的自定义编码表即可,因此,实现容易,在一定程度上提高了算法的安全性。程序可以有效地实现Base64编码的加密与解密,比较清晰的显示了整个Base64编码加密与解密的过程,通俗易懂。程序在Windows XP下调试通过。
【参考文献】
[1]史士英,李作纬.RSA快速算法的优化研究[A].第九届中国青年信息与管理学者大会论文集[C].2007.
[2]王莹,何大军.AES加密算法的改进与实现[J].电脑编程技巧与维护,2010(17).
[3]张维振.基于两种加密算法的加密解密系统的设计与实现[D].电子科技大学,2010.