3des 加密java_Java中3DES的加密与解密

3DES加密与解密的Java实现

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

/**  * 3DES工具类  */

public class DESUtils {

/**

* 加密

* @param inStr 需要加密的内容

* @param secretKey 密钥

* @return 加密后的数据

*/

public static String encrypt(String inStr, String secretKey) {

SecretKey deskey = new SecretKeySpec(secretKey.getBytes(), "DESede");

Cipher cipher;

String outStr = null;

try {

cipher = Cipher.getInstance("DESede");

cipher.init(Cipher.ENCRYPT_MODE, deskey);

outStr = byte2hex(cipher.doFinal(inStr.getBytes()));

} catch (Exception e) {

outStr = "default";

e.printStackTrace();

}

return outStr;

}

/**

* 解密

* @param inStr 需要解密的内容

* @param secretKey 密钥

* @return 解密后的数据

*/

public static String decrypt(String inStr, String secretKey)

{

SecretKey deskey = new SecretKeySpec(secretKey.getBytes(), "DESede");

Cipher cipher;   String outStr = null;

try {

cipher = Cipher.getInstance("DESede");

cipher.init(Cipher.DECRYPT_MODE, deskey);

outStr = new String(cipher.doFinal(hex2byte(inStr)));

} catch (Exception e) {

outStr = "default";

e.printStackTrace();

}

return outStr;

}

/**

* 转化为16进制字符串方法

*

* @param digest 需要转换的字节组

* @return 转换后的字符串

*/

private static String byte2hex(byte[] digest) {

StringBuffer hs = new StringBuffer();

String stmp = "";

for (int n = 0; n < digest.length; n++) {

stmp = Integer.toHexString(digest[n] & 0XFF);

if (stmp.length() == 1) {

hs.append("0" + stmp);

} else {

hs.append(stmp);

}

}

return hs.toString().toUpperCase();

}

/**

* 十六进转二进制

* @param hexStr 待转换16进制字符串

* @return 二进制字节组

*/

public static byte[] hex2byte(String hexStr){

if (hexStr == null)

return null;

hexStr = hexStr.trim();

int len = hexStr.length();

if (len == 0 || len % 2 == 1)

return null;

byte[] digest = new byte[len / 2];

try {

for (int i = 0; i < hexStr.length(); i += 2) {

digest[i / 2] = (byte) Integer.decode("0x" + hexStr.substring(i, i + 2)).intValue();

}    return digest;

} catch (Exception e) {

return null;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值