Java实现AES/CBC/PKCS7Padding加解密的方法
最近项目需要选择一套对称加密算法,来满足前后端之间的加解密操作。初步打算前端使用crypto-js来实现,后端使用java本身的加密算法实现,但遇到了一个问题:java本身只支持NoPadding和PKCS5Padding,而crypto-js提供的padding方式没有PKCS5Padding,所以不得以,前后端最终使用PKCS7Padding来实现功能.因此只能通过引入第三方jar包的方式让jave支持pkcs7padding
引入依赖
org.bouncycastle bcprov-jdk16 1.46
完整代码
packagecom.hzjd.miniapp.util;
importjava.security.Security;
importjava.security.spec.AlgorithmParameterSpec;
importjavax.crypto.Cipher;
importjavax.crypto.spec.IvParameterSpec;
importjavax.crypto.spec.SecretKeySpec;
importorg.apache.commons.codec.binary.Base64;
importorg.apache.commons.lang.StringUtils;
importorg.bouncycastle.jce.provider.BouncyCastleProvider;
importcom.sun.istack.internal.NotNull;
publicclassAESUtil{
privatestaticfinalStringCHARSET_NAME="UTF-8";
privatestaticfinalStringAES_NAME="AES";
//加密模式
publicstaticfinalStringALGORITHM="AES/CBC/PKCS7Padding";
//密钥
publicstaticfinalStringKEY="1954682168745975";
//偏移量
publicstaticfinalStringIV="1954682168745975";
static{
Security.addProvider(newBouncyCastleProvider());
}
/**
*加密
*
*@paramcontent
*@paramkey
*@return
*/
publicStringencrypt(@NotNullStringcontent){
byte[]result=null;
try{
Ciphercipher=Cipher.getInstance(ALGORITHM);
SecretKeySpeckeySpec=newSecretKeySpec(KEY.getBytes(CHARSET_NAME),AES_NAME);
AlgorithmParameterSpecparamSpec=newIvParameterSpec(IV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE,keySpec,paramSpec);
result=cipher.doFinal(content.getBytes(CHARSET_NAME));
}catch(Exceptione){
e.printStackTrace();
}
returnBase64.encodeBase64String(result);
}
/**
*解密
*
*@paramcontent
*@paramkey
*@return
*/
publicStringdecrypt(@NotNullStringcontent){
try{
Ciphercipher=Cipher.getInstance(ALGORITHM);
SecretKeySpeckeySpec=newSecretKeySpec(KEY.getBytes(CHARSET_NAME),AES_NAME);
AlgorithmParameterSpecparamSpec=newIvParameterSpec(IV.getBytes());
cipher.init(Cipher.DECRYPT_MODE,keySpec,paramSpec);
returnnewString(cipher.doFinal(Base64.decodeBase64(content)),CHARSET_NAME);
}catch(Exceptione){
e.printStackTrace();
}
returnStringUtils.EMPTY;
}
publicstaticvoidmain(String[]args){
AESUtilaes=newAESUtil();
Stringcontents="121456465";
Stringencrypt=aes.encrypt(contents);
System.out.println("加密后:"+encrypt);
Stringdecrypt=aes.decrypt(encrypt);
System.out.println("解密后:"+decrypt);
}
}
总结
到此这篇关于Java实现AES/CBC/PKCS7Padding加解密的方法的文章就介绍到这了,更多相关Java实现AES/CBC/PKCS7Padding加解密内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。