java key des_JAVA DES加密算法

这篇文章介绍了一个名为DESUtil的Java工具类,它实现了DES(Data Encryption Standard)加密和解密功能,使用DES算法配合ECB/PKCS5Padding模式,提供了密钥生成、数据加密和解密的方法。通过Base64编码处理,适合于对敏感信息的轻量级加密操作。
摘要由CSDN通过智能技术生成

package com.huatuo.register.base.util;

import java.security.Key;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

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

public class DESUtil {

//算法名称

public static final String KEY = "A2B1C7D8E5F60708";

//算法名称/加密模式/填充方式

public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";

/**

*

* 生成密钥key对象

* @param KeyStr 密钥字符串

* @return 密钥对象

* @throws InvalidKeyException

* @throws NoSuchAlgorithmException

* @throws InvalidKeySpecException

* @throws Exception

*/

private static SecretKey keyGenerator(String keyStr) throws Exception {

byte input[] = HexString2Bytes(keyStr);

DESKeySpec desKey = new DESKeySpec(input);

//创建一个密匙工厂,然后用它把DESKeySpec转换成

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey securekey = keyFactory.generateSecret(desKey);

return securekey;

}

private static int parse(char c) {

if (c >= 'a') return (c - 'a' + 10) & 0x0f;

if (c >= 'A') return (c - 'A' + 10) & 0x0f;

return (c - '0') & 0x0f;

}

// 从十六进制字符串到字节数组转换

public static byte[] HexString2Bytes(String hexstr) {

byte[] b = new byte[hexstr.length() / 2];

int j = 0;

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

char c0 = hexstr.charAt(j++);

char c1 = hexstr.charAt(j++);

b[i] = (byte) ((parse(c0) << 4) | parse(c1));

}

return b;

}

/**

* 加密数据

* @param data 待加密数据

* @param key 密钥

* @return 加密后的数据

*/

public static String encrypt(String data, String key) throws Exception{

Key deskey = keyGenerator(key);

// 实例化Cipher对象,它用于完成实际的加密操作

Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

SecureRandom random = new SecureRandom();

// 初始化Cipher对象,设置为加密模式

cipher.init(Cipher.ENCRYPT_MODE, deskey, random);

byte[] results = cipher.doFinal(data.getBytes());

// 加密后结果用Base64编码进行传输

return Base64.encodeBase64String(results);

}

/**

* 解密数据

* @param data 待解密数据

* @param key 密钥

* @return 解密后的数据

*/

public static String decrypt(String data, String key) throws Exception {

Key deskey = keyGenerator(key);

Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

//初始化Cipher对象,设置为解密模式

cipher.init(Cipher.DECRYPT_MODE, deskey);

// 执行解密操作

return new String(cipher.doFinal(Base64.decodeBase64(data)));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值