DESede对称加密算法工具类
利用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对称加密算法工具类的更多相关文章
- android----Java DES加密算法工具类
DESUtil类 public class DESUtil { private static byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (by ...
- JAVA的RSA加密算法工具类
须要用到一个jar http://www.bouncycastle.org/latest_releases.html 须要注意的问题 JS用同一秘钥生成的密文用java解密出来是逆序的,即js加密12 ...
- SHA加密算法工具类
1.利用Apache的工具类实现加密: maven: <dependency> <groupId>commons-codec</groupId> <artif ...
- MD5加密算法工具类
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...
- Java AES加密算法工具类
AESCodec.java package util; import java.security.Key; import javax.crypto.Cipher; import javax.crypt ...
- Java MD5加密算法工具类
MD5.java package util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcep ...
- 对称加密算法-DES以及DESede算法
一.简述 对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密. DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des ...
- AES算法工具类
什么是对称加密算法? AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 对称加密算法安全吗? 看过间谍局的知友们一定知道电台 ...
- RSA和AES工具类
AESUtil import com.xxx.common.BssException; import com.xxx.common.constants.CommonConstants; import ...
随机推荐
- redis之(十七)自己实现redis的cluster集群环境的搭建
[一]创建不同节点的配置文件和目录.并将配置文件中的port,cluster-enable,daemonize项做修改. --->port:修改成redis实例对应的端口号 --->clu ...
- AC日记——「HNOI2017」礼物 LiBreOJ 2020
#2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...
- AC日记——「SCOI2016」背单词 LiBreOJ 2012
#2012. 「SCOI2016」背单词 思路: Orz: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1 ...
- Apache配置基于端口号的虚拟主机 Apache virtual host configuration is based on the port
有可能只有一个ip出口,但却有多个项目,那么就需要基于端口号架设虚拟主机. Step 1: 检查是否开启 httpd-vhosts.conf apache/conf/httpd.conf文件 # Vi ...
- vue2.0使用watch监听对象属性
二话不说直接代码,找了一个百度都没找到.... var head=new Vue({ data:{ checkBoxState:{//监听设置开关勾选状态 notice:true, sound:tru ...
- 风情万种awk
awk是基于列的文本处理工具,所有的文件都是由单词和各种空白字符组成.这里"空白字符"包括空格.tab以及连续的空格和tab,每个非空白的部分叫做"域",从左到 ...
- Pycharm中的Django项目连接mysql数据库
一.安装Pycharm和Django就不详细说了,自行百度 二.新建Django项目也不说了 三.配置Django连接到mysql 1.models.py写一个类,继承models.Model cla ...
- 四十二 常用内建模块 collections
collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...
- python模块之HTMLParser
HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径. HTMLParser采用的是一种事件驱动的模式,当HTMLParse ...
- 洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]
题目传送门 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或x ...