JAVA对称加密算法汇总及实现

本文详细介绍了几种常见的对称加密算法,包括DES、三重DES、AES、IDEA以及口令加密PBE。针对每种算法,文章提供了具体的实现步骤,如密钥生成、加密和解密过程,并附带了Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、DES算法
设置算法及参数

//算法名称
public static final String KEY_ALGORITHM = "DES";
//算法名称/加密模式/填充方式
public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";

生成密钥
		KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();

还原密钥
	private static Key toKey(byte[] key) {
DESKeySpec des = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(des);
return secretKey;
}

加密
	public static byte[] encrypt(byte[] data ,byte[] key) {
Key k = toKey(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, k);
return cipher.doFinal();
}

解密
		Key k = toKey(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, k);
return cipher.doFinal();

[color=red]注:加密和解密的区别在于init初始化时模式[/color]
二、三重DES---DESede
其过程同上只需把变声明算法改变一下,Java6支持的密钥长度为112或168

//算法名称
public static final String KEY_ALGORITHM = "DESede";
//算法名称/加密模式/填充方式
public static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";

还原密钥
DESedeKeySpec des = new DESedeKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(des);

三、AES算法
同DES基本一致。
	public static final String KEY_ALGORITHM = "AES";
public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
private static Key toKey(byte[] key){
SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
return secretKey;
}

四、IDEA 同AES算法一致。
	public static final String KEY_ALGORITHM = "IDEA";
public static final String CIPHER_ALGORITHM = "IDEA/ECB/PKCS5Padding";
private static Key toKey(byte[] key){
SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
return secretKey;
}


五、基本口令加密---PBE
import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

public class PBECode {
public static final String ALGORITHM = "PBEWITHMD5andDES";
//迭代次数
public static final int ITERATION_COUNT = 100;
/**
* 盐初始化<br>
* 盐长度必须为8字节
* @return byte[] 盐
*/
public static byte[] initSalt(){
//实例化安全随机数
SecureRandom random = new SecureRandom();
//生产盐
return random.generateSeed(8);
}
/**
* 转换密钥
* @param password 密码
* @return key 密钥
* @throws Exception
*/
private static Key toKey(String password)throws Exception{
//密钥材料转换
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
//实例化
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(keySpec);
return secretKey;
}
/**
* 加密
* @param data 数据
* @param password 密码
* @param salt 盐
* @return byte[] 加密数据
* @throws Exception
*/
public static byte[] encrypt(byte[] data,String password,byte[] salt) throws Exception{
Key key = toKey(password);
//实例化PBE参数材料
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATION_COUNT);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key,parameterSpec);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data, String password,byte[] salt) throws Exception{
Key key = toKey(password);
//实例化PBE参数材料
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATION_COUNT);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key,parameterSpec);
return cipher.doFinal(data);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值