利用Cipher的核心功能,自己封装了一个加密解密的工具类,可以直接使用。在使用之前需要先下载commons-codec-1.9.jar,并导入项目。

工具类如下:

package com.pcict.util.test;

import org.apache.commons.codec.binary.Base64;

import javax.crypto.*;
import javax.crypto.spec.DESedeKeySpec;
import java.nio.charset.Charset;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays; /**
* DESede对称加密算法
*
* @Description
* @author ljz
* @created 2015年7月31日 上午11:30:04
* @version
* @history
* @see
*/
public class DESedeUtils { // 加密模式
public static final int ENCRYPT_MODE = Cipher.ENCRYPT_MODE;
// 解密模式
public static final int DECRYPT_MODE = Cipher.DECRYPT_MODE; private static final String ALGORITHM = "DESede";
private static final Charset UTF8 = Charset.forName("UTF-8"); private Cipher cipher = null;
private int opmode = 0; // 初始化加密或解密
public synchronized boolean init(int mode, String key) {
if (opmode != 0) {
return true;
} if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
return false;
} if (key == null || key.isEmpty()) {
return false;
} try {
cipher = Cipher.getInstance(ALGORITHM);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (cipher == null) {
return false;
}
}
Key secKey = getSecKey(key);
if (secKey == null) {
return false;
}
try {
cipher.init(mode, secKey, new SecureRandom());
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
opmode = mode;
return true;
} private static Key getSecKey(String key) {
SecretKey securekey = null;
try {
byte[] material = Arrays.copyOf(
Base64.decodeBase64(key.getBytes(UTF8)), 24);
DESedeKeySpec keySpec = new DESedeKeySpec(material);
SecretKeyFactory keyFactory = SecretKeyFactory
.getInstance(ALGORITHM);
securekey = keyFactory.generateSecret(keySpec);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return securekey;
} // 加密
public synchronized String encrypt(String data) {
if (opmode != ENCRYPT_MODE) {
return null;
}
if (data == null) {
return null;
}
byte[] encData = null;
try {
encData = cipher.doFinal(data.getBytes(UTF8));
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (encData == null) {
return null;
}
return new String(Base64.encodeBase64(encData), UTF8);
} // 解密
public synchronized String decrypt(String data) {
if (opmode != DECRYPT_MODE) {
return null;
}
if (data == null) {
return null;
}
byte[] decData = null;
try {
decData = cipher.doFinal(Base64.decodeBase64(data.getBytes(UTF8)));
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (decData == null) {
return null;
}
return new String(decData, UTF8);
} }

测试如下:

package com.pcict.util.test;

public class Test {
public static void main(String[] args) {
DESedeUtils encoder = new DESedeUtils();
String key = "123456";
// 以123456作为加密的密匙,在后面解密的时候也要以该密匙作为解密的密匙
encoder.init(DESedeUtils.ENCRYPT_MODE, key);
String str = encoder.encrypt("1");
System.out.println(str);
DESedeUtils decoder = new DESedeUtils();
// 调用初始化解密
decoder.init(DESedeUtils.DECRYPT_MODE, key);
String str1 = decoder.decrypt(str);
System.out.println(str1);
}
}

附commons-codec-1.9.jar文件:点击下载

DESede对称加密算法工具类的更多相关文章

  1. android----Java DES加密算法工具类

    DESUtil类 public class DESUtil { private static byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (by ...

  2. JAVA的RSA加密算法工具类

    须要用到一个jar http://www.bouncycastle.org/latest_releases.html 须要注意的问题 JS用同一秘钥生成的密文用java解密出来是逆序的,即js加密12 ...

  3. SHA加密算法工具类

    1.利用Apache的工具类实现加密: maven: <dependency> <groupId>commons-codec</groupId> <artif ...

  4. MD5加密算法工具类

    import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...

  5. Java AES加密算法工具类

    AESCodec.java package util; import java.security.Key; import javax.crypto.Cipher; import javax.crypt ...

  6. Java MD5加密算法工具类

    MD5.java package util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcep ...

  7. 对称加密算法-DES以及DESede算法

    一.简述 对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密. DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des ...

  8. AES算法工具类

    什么是对称加密算法? AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 对称加密算法安全吗? 看过间谍局的知友们一定知道电台 ...

  9. RSA和AES工具类

    AESUtil import com.xxx.common.BssException; import com.xxx.common.constants.CommonConstants; import ...

随机推荐

  1. Oracle中的case when then else end 应用

    Case when 的用法,简单Case函数 简单CASE表达式,使用表达式确定返回值. 语法: CASE search_expression WHEN expression1 THEN result ...

  2. hdu 2881(LIS变形)

    Jack's struggle Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  3. debian 7 安装 rz sz lrzsz

    https://blog.csdn.net/hchaoyangming/article/details/51582749

  4. iwebshop 自动给css js链接加版本信息

    lib/core/tag_class.php case 'theme:': $path = $matches[4]; $exts = strtolower(substr($matches[4], st ...

  5. AndroidManifest.xml文件详解(application)

    http://blog.csdn.net/think_soft/article/details/7557101 语法(SYNATX): <application android:allowTas ...

  6. 34、Flask实战第34天:修改邮箱

    修改邮箱页面布局 新建cms/cms_resetemail.html {% extends 'cms/cms_base.html' %} {% block title %}修改邮箱-CMS管理系统{% ...

  7. Telnet操作memcached

    telnet登录 #telnet <ip> [root@c1 ~]# telnet Trying 127.0.0.1... Connected to 127.0.0.1. Escape c ...

  8. EasyUI学习总结(四)——parser源码分析(转载)

    本文转载自:http://www.cnblogs.com/xdp-gacl/p/4082561.html parser模块是easyloader第一个加载的模块,它的主要作用,就是扫描页面上easyu ...

  9. 【大视野入门OJ】1083:数组的二分查找

    Description 在1500个整数中查整数x的位置,这些数已经从小到大排序了.若存在则输出其位置,若不存在则输出-1. Input 第一行,一个整数x 后面1500行,每行一个整数 Output ...

  10. 【BZOJ 1815】【SHOI 2006】color 有色图

    http://www.lydsy.com/JudgeOnline/problem.php?id=1815 这道题好难啊,组合数学什么根本不会啊qwq 题解详见08年的Pólya计数论文. 主要思想是只 ...