Java DES解密代码

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;

public class DESUtils {

/**
* 密钥算法
*/
private static final String ALGORITHM = "DES";
/**
* 加密/解密算法-工作模式-填充模式
*/
private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
/**
* 默认编码
*/
private static final String CHARSET = "utf-8";

public static void main(String[] args) {
//偏移变量,固定占8位字节
String iv = "54a6cc76";
//密码
String password = "54a6cc76-e700-a1b2-fa3d-fb966efb7578";
//加密
String data = "1234567890";
String encrypt = encrypt(password, iv, data);
System.out.println(encrypt);
//解密
String decrypt = decrypt(password, iv, encrypt);
System.out.println(decrypt);

}

/**
* 生成key
*
* @param password
* @return
* @throws Exception
*/
private static Key generateKey(String password) throws Exception {
DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
return keyFactory.generateSecret(dks);
}


/**
* DES加密字符串
*
* @param password 加密密码,长度不能够小于8位
* @param data 待加密字符串
* @param ivParam 偏移向量
* @return 加密后内容
*/
public static String encrypt(String password, String ivParam, String data) {
if (password== null || password.length() < 8) {
throw new RuntimeException("加密失败,key不能小于8位");
}
if (data == null){
return null;
}
try {
Key secretKey = generateKey(password);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(ivParam.getBytes(CHARSET));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));

BASE64Encoder encoder = new BASE64Encoder();
return new String(encoder.encode(bytes));

} catch (Exception e) {
e.printStackTrace();
return data;
}
}

/**
* DES解密字符串
*
* @param password 解密密码,长度不能够小于8位
     * @param ivParam 偏移向量
     * @param data 待解密字符串
* @return 解密后内容
*/
public static String decrypt(String password, String ivParam, String data) {
if (password== null || password.length() < 8) {
throw new RuntimeException("加密失败,key不能小于8位");
}
if (data == null){
return null;
}
try {
Key secretKey = generateKey(password);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(ivParam.getBytes(CHARSET));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
BASE64Decoder decoder = new BASE64Decoder();
return new String(cipher.doFinal(decoder.decodeBuffer(data)), CHARSET);
} catch (Exception e) {
e.printStackTrace();
return data;
}
}

}

转载于:https://www.cnblogs.com/wenzq/p/11199114.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的DES解密功能由JCE(Java Cryptography Extension)实现。首先需要导入JCE库,代码如下: import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.SecureRandom; 其中,`Cipher`类提供加密和解密方法,`KeyGenerator`类用于生成密钥,`SecretKey`类表示密钥,`SecretKeySpec`类表示密钥的规范,`SecureRandom`类提供随机数生成功能。 加密代码如下: public static byte[] encryptDES(byte[] plainData, byte[] keyData) throws Exception { SecretKeySpec keySpec = new SecretKeySpec(keyData, "DES"); Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, new SecureRandom()); return cipher.doFinal(plainData); } 其中,`plainData`为待加密数据,`keyData`为密钥,`"DES/ECB/PKCS5Padding"`表示采用DES算法、ECB加密模式和PKCS5Padding填充方式。 解密代码如下: public static byte[] decryptDES(byte[] cipherData, byte[] keyData) throws Exception { SecretKeySpec keySpec = new SecretKeySpec(keyData, "DES"); Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, keySpec, new SecureRandom()); return cipher.doFinal(cipherData); } 其中,`cipherData`为密文数据,其余参数的含义与加密代码相同。 需要注意的是,DES算法已经被认为是不安全的,而且只能处理8字节的数据块,因此在实际应用中应尽量采用更安全的加密算法,如AES。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值