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

com.gitee.apanlh.util.algorithm.encrypt.symmetric.SM4 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;

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

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

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

示例用法: *

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy