Java实现AES/CBC/PKCS7Padding加解密的方法

 更新时间:2020年08月12日 08:32:53   作者:Tiro8183  
这篇文章主要介绍了Java实现AES/CBC/PKCS7Padding加解密的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

最近项目需要选择一套对称加密算法,来满足前后端之间的加解密操作。初步打算前端使用crypto-js来实现,后端使用java本身的加密算法实现,但遇到了一个问题:java本身只支持NoPadding和PKCS5Padding,而crypto-js提供的padding方式没有PKCS5Padding,所以不得以,前后端最终使用PKCS7Padding来实现功能.因此只能通过引入第三方jar包的方式让jave支持pkcs7padding

引入依赖

<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk16</artifactId>
			<version>1.46</version>
		</dependency>

完整代码

package com.hzjd.miniapp.util;

import java.security.Security;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import com.sun.istack.internal.NotNull;

public class AESUtil {
	private static final String CHARSET_NAME = "UTF-8";
	private static final String AES_NAME = "AES";
	// 加密模式
	public static final String ALGORITHM = "AES/CBC/PKCS7Padding";
	// 密钥
	public static final String KEY = "1954682168745975";
	// 偏移量
	public static final String IV = "1954682168745975";
	static {
		Security.addProvider(new BouncyCastleProvider());
	}

	/**
	 * 加密
	 *
	 * @param content
	 * @param key
	 * @return
	 */
	public String encrypt(@NotNull String content) {
		byte[] result = null;
		try {
			Cipher cipher = Cipher.getInstance(ALGORITHM);
			SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(CHARSET_NAME), AES_NAME);
			AlgorithmParameterSpec paramSpec = new IvParameterSpec(IV.getBytes());
			cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
			result = cipher.doFinal(content.getBytes(CHARSET_NAME));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return Base64.encodeBase64String(result);
	}

	/**
	 * 解密
	 *
	 * @param content
	 * @param key
	 * @return
	 */
	public String decrypt(@NotNull String content) {
		try {
			Cipher cipher = Cipher.getInstance(ALGORITHM);
			SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(CHARSET_NAME), AES_NAME);
			AlgorithmParameterSpec paramSpec = new IvParameterSpec(IV.getBytes());
			cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec);
			return new String(cipher.doFinal(Base64.decodeBase64(content)), CHARSET_NAME);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return StringUtils.EMPTY;
	}

	public static void main(String[] args) {
		AESUtil aes = new AESUtil();
		String contents = "121456465";
		String encrypt = aes.encrypt(contents);
		System.out.println("加密后:" + encrypt);
		String decrypt = aes.decrypt(encrypt);
		System.out.println("解密后:" + decrypt);
	}
}

总结

到此这篇关于Java实现AES/CBC/PKCS7Padding加解密的方法的文章就介绍到这了,更多相关Java实现AES/CBC/PKCS7Padding加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解SpringBoot如何删除引用jar包中的无用bean

    详解SpringBoot如何删除引用jar包中的无用bean

    为了赶速度和直接将之前多模块的maven项目中的部分模块,直接以jar包的形式引入到新项目中了,虽然省去了不少开发时间,导致项目臃肿,启动很慢。本文将用@ComponentScan注解去实现让项目只加载自己需要的bean,需要的可以参考一下
    2022-06-06
  • Java多线程阻塞与唤醒代码示例

    Java多线程阻塞与唤醒代码示例

    本文主要向大家分享了Java多线程中的阻塞与唤醒的相关内容,通过这篇文章大家可以大致了解到进入线程阻塞状态和可执行状态的方法,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot如何使用applicationContext.xml配置文件

    SpringBoot如何使用applicationContext.xml配置文件

    这篇文章主要介绍了SpringBoot使用applicationContext.xml配置文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • @RunWith(SpringJUnit4ClassRunner.class)报错问题及解决

    @RunWith(SpringJUnit4ClassRunner.class)报错问题及解决

    这篇文章主要介绍了@RunWith(SpringJUnit4ClassRunner.class)报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Spring Boot通过Junit实现单元测试过程解析

    Spring Boot通过Junit实现单元测试过程解析

    这篇文章主要介绍了Spring Boot通过Junit实现单元测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • java实现贪吃蛇游戏代码(附完整源码)

    java实现贪吃蛇游戏代码(附完整源码)

    这篇文章主要介绍了java实现贪吃蛇游戏代码(附完整源码),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java弱引用集合WeakHashMap总结

    Java弱引用集合WeakHashMap总结

    这篇文章主要介绍了Java弱引用集合WeakHashMap总结,WeakHashMap利用WeakReference的弱引用特性让用户在使用的过程中不会因为没有释放Map中的资源而导致内存泄露,WeakHashMap实现了Map接口,使用方式和其他的Map相同,需要的朋友可以参考下
    2023-09-09
  • SpringBoot使用MyBatis时的几种传参规范示例

    SpringBoot使用MyBatis时的几种传参规范示例

    使用Mybatis作为持久层框架时,对于数据库的增删改查等操作都需要参数的传递,本文就详细的介绍了一下SpringBoot使用MyBatis时的几种传参规范示例,感兴趣的可以了解一下
    2022-02-02
  • Spring Boot中的JdbcTemplate是什么及用法小结

    Spring Boot中的JdbcTemplate是什么及用法小结

    Spring Boot中的JdbcTemplate是一个强大的数据库访问工具,它简化了数据库操作的过程,在本文中,我们了解了JdbcTemplate的基本概念,并演示了如何在Spring Boot应用程序中使用它,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Java利用TCP实现服务端向客户端消息群发的示例代码

    Java利用TCP实现服务端向客户端消息群发的示例代码

    这篇文章主要为大家详细介绍了Java如何利用TCP协议实现服务端向客户端消息群发功能,文中的示例代码讲解详细,需要的可以参考下,希望对你有所帮助
    2022-08-08

最新评论