首页 > 范文大全 > 正文

DES加密算法的JAVA实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇DES加密算法的JAVA实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要: des数据加密算法是最著名的对称密钥加密算法,在计算机密码学及计算机数据通信的发展过程中起着重要的作用。分析了DES数据加密算法的基本原理,用java语言实现了对文件的加密。

Abstract: The DES data encryption algorithm takes the most famous symmetrical key encryption algorithm, is playing the vital role in the computer cryptology and in the computer data communication's developing process. The article has analyzed the basic principle of DES data encryption algorithm, finally used the JAVA language to realize it to the document encryption.

关键词: DES算法;密钥;加密;明文;密文;JAVA

Key words: data encryption standard algorithm; key; encryption; plaintext; cipher text; JAVA

中图分类号:TP39 文献标识码:A 文章编号:1006-4311(2011)13-0180-02

1 DES数据加密标准算法原理分析

DES是一种分组密码。假定明文m是由0和1组成的长度为64位的符号串,密钥k也是64位的0、1符号串。

设:M=m1m2m3…m64

K=k1k2k3…k64

加密过程为:

DES(m)=IP-1・T16・T15…T2・T1・IP(m)

其中:IP(m)是初始置换,IP-1是逆置换,T16~T1是16次迭代。

1.1 初始置换IP 功能是把输入的明文m按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则

58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17, 9, 1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7

1.2 逆置换IP-1 经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换。逆置换满足:

IP・IP-1=IP-1・IP=I

逆置换正好是初始置换的逆运算。

1.3 T16~T1的迭代计算 DES的迭代算法采用模2加法。在通信网络两端,双方约定了一致的密钥。在通信的源点用密钥对核心数据进行加密并形成密文,然后,以密文的形式在公共通信网中传输到通信网络终点。数据到达终点后,用同样的密钥对密文数据进行解密,便再现了明文形式的核心数据。这样,保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

2 DES对文件加密的JAVA实现

2.1 程序实现过程

程序名为: FileEncrypter.java

加密方法:三重DES加密

加密过程: 对选中的文件加密后在同文件夹下生成一个增加了“.tdes”扩展名的加密文件 。

解密过程:对选中的加密文件(必须有".tdes"扩展名)进行解密。具体过程如下:①定义构造函数;②定义加密函数;③定义解密函数;④用DES方法加密输入的字节;⑤用DES方法解密输入的字节。

2.2 DES加密算法的java实现 为了实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥。保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了。具体方法如下:

public static void saveDesKey(){

try {

SecureRandom sr=new SecureRandom();

KeyGenerator kg=KeyGenerator.getInstance (\"DES\");

kg.init (sr);

FileOutputStream fos=new FileOutputStream(\"C:/DesKey.xml\");

ObjectOutputStream oos=new ObjectOutputStream(fos);

Key key=kg.generateKey();

oos.writeObject(key);

oos.close();

} catch (Exception e) {

e.printStackTrace();

} }

public static Key getKey() {

Key kp=null;

try {

String fileName=\"conf/DesKey.xml\";

InputStream is=DesUtil.class.getClassLoader()

.getResourceAsStream(fileName);

ObjectInputStream oos=new ObjectInputStream(is);

kp=(Key) oos.readObject(); [Page]

oos.close();

} catch (Exception e) {

e.printStackTrace();

}

return kp;}

public static void encrypt(String file, String destFile) throws Exception {

Cipher cipher=Cipher.getInstance(\"DES\");

cipher.init(Cipher.ENCRYPT_MODE, getKey());

InputStream is=new FileInputStream(file);

OutputStream out=new FileOutputStream(dest);

CipherInputStream cis=new CipherInputStream(is, cipher);

byte[] buffer=new byte[1024];

int r ;

while ((r=cis.read(buffer))>0) {

out.write(buffer,0,r); }

cis.close(); is.close(); out.close();

}

3 总结

DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。本文用JAVA语言实现了对文件的加密。

参考文献:

[1]蔡皖东.网络与信息安全[M].陕西:西北工业大学出版社,2004.

[2]数字时代工作室.个人用网安全与黑客防范技术[M].北京:人民邮电出版社,2001.

[3]卢开澄.计算机密码学――计算机网络中的数据保密与安全[M].北京:清华大学出版社,2003.

[4]张千里,陈光英.网络安全新技术[M]. 北京:人民邮电出版社,2003.

[5]袁葆宏,刘丰豪,吴建和.Java2语言实务[M]. 北京:中国铁道出版社,2001.

[6]位元文化.JavaApplet程序设计实务[M].北京:中国铁道出版社,2001.

[7]Budi Kurniawan著,刘克科译.JavaServer Faces编程[M].北京:清华大学出版社,2005.