时间:2021-05-20
最近项目需要选择一套对称加密算法,来满足前后端之间的加解密操作。初步打算前端使用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加解密内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
AES加解密AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB和OFBCTR,直接上代码,此处为AES加密中的CBC模式,EBC模式与CB
golang实现加密解密的库很多,这里使用的是aes库+base64库来实现.使用时,需要指定一个私钥,来进行加解密,这里指定是:varaeskey=[]byt
本文实例讲述了Java实现与JS相同的Des加解密算法。分享给大家供大家参考,具体如下:这里演示java与js实现相同的des加解密算法,不多说,不废话,直接上
本文实例讲述了java使用Hex编码解码实现Aes加密解密功能。分享给大家供大家参考,具体如下:这里的Aes加密解密方法使用Hex进行了编码解码packagec
AES加密方式有五种:ECB,CBC,CTR,CFB,OFB从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现python在