All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.apanlh.util.algorithm.encrypt.symmetric.DES Maven / Gradle / Ivy

There is a newer version: 2.0.0.2
Show newest version
package com.gitee.apanlh.util.algorithm.encrypt.symmetric;

import com.gitee.apanlh.util.algorithm.KeyUtils;
import com.gitee.apanlh.util.algorithm.encrypt.AlgorithmMode;
import com.gitee.apanlh.util.algorithm.encrypt.AlgorithmPadding;

/**
 * 	DES对称加密算法
 * 	
提供了DES加密和解密的功能 *
可自定义key、iv、分组模式、填充模式等等来完成创建不同的DES实例 * *

参数说明: *
- key: 密钥的字节数组,用于加密和解密数据 *
- iv: 初始化向量的字节数组,用于CBC模式。ECB模式不需要初始化向量,传入null即可 *
- algorithmMode: 加密器模式,如ECB、CBC等 *
- algorithmPadding: 加密填充模式,如PKCS5、PKCS7等 * *

注意事项: *
- ECB模式下不需要初始化向量(iv),传入null即可。 *
- 对于DES算法固定为64位(8字节),初始化向量(iv)长度应该与加密算法块大小一致 *
- 填充算法PKCS5/PKCS7通常适用于大多数情况,但在特殊需求下可能需要使用其他填充算法 *
- 使用CBC等带有初始化向量的模式时,必须确保密钥和初始化向量的安全存储和传输 *
- 对于不同的加密器模式和填充算法,可能需要在解密时手动进行去除填充操作 * *

示例用法: *

 * 	注意:静态方法会更方便构建
 * 	使用默认的ECB模式和PKCS5填充算法,随机生成64位密钥
 * 	DES des1 = new DES();
 * 	// 使用指定的密钥和初始化向量(iv),采用默认的CBC模式和PKCS5填充算法
 * 	DES des2 = new DES(KeyUtils.generate64(), RandomUtils.generate64());
 * 	
* * @author Pan */ public class DES extends BouncyCastleSymmetricAbstract { /** * 构造函数-ECB模式加密器 *
默认DES/ECB/PKCS5Padding算法 *
随机64位密钥长度 * * @author Pan */ public DES() { this(KeyUtils.generate64()); } /** * 构造函数-ECB模式加密器 *
默认DES/ECB/PKCS5Padding算法 * * @author Pan * @param key 密钥 */ public DES(byte[] key) { super(key, null, SymmetricType.DES); } /** * 构造函数-ECB模式加密器 *
自定义密钥 *
自定义填充方法 * * @author Pan * @param key 密钥 * @param algorithmPadding 加密填充模式 */ public DES(byte[] key, AlgorithmPadding algorithmPadding) { super(key, null, SymmetricType.DES, AlgorithmMode.ECB, algorithmPadding); } /** * 构造函数-CBC模式加密器 *
默认DES/CBC/PKCS5Padding算法 *
自定义密钥 *
自定义向量 * * @author Pan * @param key 密钥 * @param iv 初始化向量字节 */ public DES(byte[] key, byte[] iv) { this(key, iv, AlgorithmPadding.PKCS5); } /** * 构造函数-CBC模式加密器 *
自定义密钥 *
自定义向量 *
自定义填充方法 * * @author Pan * @param key 密钥 * @param iv 初始化向量 * @param algorithmPadding 加密填充模式 */ public DES(byte[] key, byte[] iv, AlgorithmPadding algorithmPadding) { this(key, iv, AlgorithmMode.CBC, algorithmPadding); } /** * 构造函数-自定义模式加密器 *
自定义密钥 *
自定义向量 *
自定义加密器模式 *
自定义填充方法 * * @author Pan * @param key 密钥 * @param iv 初始化向量 * @param algorithmMode 加密器模式 * @param algorithmPadding 加密填充模式 */ public DES(byte[] key, byte[] iv, AlgorithmMode algorithmMode, AlgorithmPadding algorithmPadding) { super(key, iv, SymmetricType.DES, algorithmMode, algorithmPadding); } /** * 构建-自定义模式加密器 *
自定义密钥 *
自定义向量 *
自定义加密器模式 *
自定义填充方法 * * @author Pan * @param key 密钥 * @param iv 初始化向量 * @param algorithmMode 加密器模式 * @param algorithmPadding 加密填充模式 * @return DES */ public static DES create(byte[] key, byte[] iv, AlgorithmMode algorithmMode, AlgorithmPadding algorithmPadding) { return new DES(key, iv, algorithmMode, algorithmPadding); } /** * 构建-ECB模式加密器 *
默认DES/ECB/PKCS5Padding算法 *
随机64位密钥长度 * * @author Pan * @return DES */ public static DES createEcb() { return new DES(); } /** * 构建-ECB模式加密器 *
默认DES/ECB/PKCS5Padding算法 * * @author Pan * @param key 密钥 * @return DES */ public static DES createEcb(byte[] key) { return new DES(key); } /** * 构建-ECB模式加密器 *
自定义密钥 *
自定义填充方法 * * @author Pan * @param key 密钥 * @param algorithmPadding 加密填充模式 * @return DES */ public static DES createEcb(byte[] key, AlgorithmPadding algorithmPadding) { return new DES(key, algorithmPadding); } /** * 构建-CBC模式加密器 *
默认DES/CBC/PKCS5Padding算法 *
随机64位密钥 *
随机64位向量密钥长度 * * @author Pan * @return DES */ public static DES createCbc() { return createCbc(KeyUtils.generate64(), KeyUtils.generate64(), AlgorithmPadding.PKCS5); } /** * 构建-CBC模式加密器 *
默认DES/CBC/PKCS5Padding算法 *
自定义密钥 *
随机64位向量密钥长度 * * @author Pan * @param key 密钥 * @return DES */ public static DES createCbc(byte[] key) { return createCbc(key, KeyUtils.generate64(), AlgorithmPadding.PKCS5); } /** * 构建-CBC模式加密器 *
默认DES/CBC/PKCS5Padding算法 *
自定义密钥 *
自定义向量密钥长度 * * @author Pan * @param key 密钥 * @param iv 初始化向量字节 * @return DES */ public static DES createCbc(byte[] key, byte[] iv) { return createCbc(key, iv, AlgorithmPadding.PKCS5); } /** * 构建-CBC模式加密器 *
自定义密钥 *
自定义向量 *
自定义填充方法 * * @author Pan * @param key 密钥 * @param iv 初始化向量 * @param algorithmPadding 加密填充模式 * @return DES */ public static DES createCbc(byte[] key, byte[] iv, AlgorithmPadding algorithmPadding) { return new DES(key, iv, algorithmPadding); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy