【Android工具类】比DES加密更安全的算法——3DES加密算法
2014-11-13 23:32
369 查看
转载请注明出处: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);
具体的代码实现过程如下
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;
}
}
测试类的代码如下
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));
}
}
在前面的文章里面,我们讨论了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);
具体的代码实现过程如下
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;
}
}
测试类的代码如下
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));
}
}
相关文章推荐
- 【Android工具类】比DES加密更安全的算法——3DES加密算法
- Android比DES加密更安全的算法——3DES加密算法
- Android比DES加密更安全的算法——3DES加密算法
- 比DES加密更安全的算法——3DES加密算法
- 比DES加密更安全的算法——3DES加密算法
- 【Android工具类】DES加密时代的终结者——AES加密算法
- 【Android工具类】如何保证Android与服务器的DES加密保持一致
- 【Android工具类】怎样保证Android与server的DES加密保持一致
- android提供的算法工具类
- 【Android工具类】DES加密时代的终结者——AES加密算法
- Android 实现图片高斯模糊算法,真正有效的工具类
- [Android算法] 实现获取视频的缩略图(ThumbnailUtils),并且播放
- 基于java数组的DES加密、解密的算法实现
- DES加密与解密算法
- Android 连连看的算法
- Android平台和java平台 DES加密解密互通程序及其不能互通的原因
- Android: MediaScanner生成thumbnail的算法
- Android和.NET通用的AES算法 (转) 好东东 收藏一下
- 【原创】一个android访问http资源的便捷工具类——HttpHelper
- 3.腾讯微博Android客户端开发——算法、编码、辅助方法编写