您的位置:首页 > 移动开发 > Android开发

Android比DES加密更安全的算法——3DES加密算法

2016-03-30 12:35 423 查看
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

在前面的文章里面,我们讨论了DES算法,同时也明白了如何才能保证不同平台下的加密和解密结果的一致性。但是DES作为出现了很长时间的一种加密算法,随着计算机运算能力的加强,DES加密容易被暴力破解,其安全性变得有点低。于是,为了增强数据的安全性,3DES算法就应运而生了。

3DES,顾名思义,就是对DES加密算法的改进,3DES通过对每个数据进行3次DES加密,从而降低被破解的可能性。

如果我们要使用3DES加密,需要以下几个步骤

①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象

SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm);

②根据算法实例化Cipher对象。它负责加密/解密

Cipher c1 = Cipher.getInstance(Algorithm);

③传入加密/解密模式以及SecretKey密钥对象,实例化Cipher对象

c1.init(Cipher.ENCRYPT_MODE, deskey);

④传入字节数组,调用Cipher.doFinal()方法,实现加密/解密,并返回一个byte字节数组

c1.doFinal(src);

具体的代码实现过程如下

[java] view
plaincopy





package com.qust;

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

/**

*

* @ClassName: com.qust.SecretUtils

* @Description: 3DES加密解密工具类

* @author zhaokaiqiang

* @date 2014-11-13 下午11:28:14

*

*/

public class DES3Utils {

// 定义加密算法,DESede即3DES

private static final String Algorithm = "DESede";

// 加密密钥

private static final String PASSWORD_CRYPT_KEY = "zhaokaiqiang1992";

/**

* 加密方法

*

* @param src

* 源数据的字节数组

* @return

*/

public static byte[] encryptMode(byte[] src) {

try {

// 生成密钥

SecretKey deskey = new SecretKeySpec(

build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);

// 实例化Cipher

Cipher cipher = Cipher.getInstance(Algorithm);

cipher.init(Cipher.ENCRYPT_MODE, deskey);

return cipher.doFinal(src);

} catch (java.security.NoSuchAlgorithmException e1) {

e1.printStackTrace();

} catch (javax.crypto.NoSuchPaddingException e2) {

e2.printStackTrace();

} catch (java.lang.Exception e3) {

e3.printStackTrace();

}

return null;

}

/**

* 解密函数

*

* @param src

* 密文的字节数组

* @return

*/

public static byte[] decryptMode(byte[] src) {

try {

SecretKey deskey = new SecretKeySpec(

build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);

Cipher c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE, deskey);

return c1.doFinal(src);

} catch (java.security.NoSuchAlgorithmException e1) {

e1.printStackTrace();

} catch (javax.crypto.NoSuchPaddingException e2) {

e2.printStackTrace();

} catch (java.lang.Exception e3) {

e3.printStackTrace();

}

return null;

}

/**

* 根据字符串生成密钥24位的字节数组

*

* @param keyStr

* @return

* @throws UnsupportedEncodingException

*/

public static byte[] build3DesKey(String keyStr)

throws UnsupportedEncodingException {

byte[] key = new byte[24];

byte[] temp = keyStr.getBytes("UTF-8");

if (key.length > temp.length) {

System.arraycopy(temp, 0, key, 0, temp.length);

} else {

System.arraycopy(temp, 0, key, 0, key.length);

}

return key;

}

}

测试类的代码如下

[java] view
plaincopy





package com.qust;

public class Main {

public static void main(String[] args) {

String msg = "使用3DES对数据进行加密";

System.out.println("【加密前】:" + msg);

// 加密

byte[] secretArr = DES3Utils.encryptMode(msg.getBytes());

System.out.println("【加密后】:" + new String(secretArr));

// 解密

byte[] myMsgArr = DES3Utils.decryptMode(secretArr);

System.out.println("【解密后】:" + new String(myMsgArr));

}

转载地址:/article/1914861.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: