利用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. Nginx配置问题总结

    1.Nginx直接下载解压,有个nginx.exe文件,双击即开启Nginx服务(windows系统下).默认是80端口. 若服务无法启动,考虑以下三方面问题: (1)端口号80是否被占用 (2)防火 ...

  2. python读写hdf5及cdf格式文件

    Python write and read hdf5 file http://stackoverflow.com/questions/20928136/input-and-output-numpy-a ...

  3. HTTP资源合集

    (1)MoZILLA开发者web技术文档之HTTP 未完待续...

  4. 计算机编码中的换行 CR与LF

    以下的文字为转载,但是有错误的地方,博主自行进行了修正和补充,用红色标示. 原文地址在这里. ------------ 转载起始 ------------- “回车”(Carriage Return) ...

  5. mysql中json数据的拼接方式

    SELECT CONCAT('[', GROUP_CONCAT( CONCAT('{"id":"',STRUCTURE_ID,'"'),',', CONCAT( ...

  6. Sql Server中常用函数replicate

    SQL常用函数之三 REPLICATE () 按指定次数重复字符表达式. 语法 REPLICATE ( character_expression, integer_expression) 参数 cha ...

  7. 虚拟机Visualbox安装CentOS

    选择安装CentOS系统 进入了安装界面,选择语言,并选择继续 安装的主界面 1.先选择日期时间,选择了亚洲,并选择上海,再点击左上角的完成按钮 2.再选择键盘,选择英文 3.选择语言为英语 4.选择 ...

  8. CKEditor的API查看

    概述 在写上一篇随笔的过程中翻看了CKEditor的API,现在把相关的经验记录下来. CKEditor的相关文档地址:http://docs.ckeditor.com/#,API在第二个标签页:第一 ...

  9. Bzoj 2190 仪仗队(莫比乌斯反演)

    题面 bzoj 洛谷 题解 看这个题先大力猜一波结论 #include <cstdio> #include <cstring> #include <algorithm&g ...

  10. 持续获取password

    function GetPasswd { RunCounter=1 DB_PSSWD=getpassword while [ -z "${DB_PSSWD}" -a ${RunCo ...