Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法
最近項(xiàng)目需要選擇一套對(duì)稱加密算法,來(lái)滿足前后端之間的加解密操作。初步打算前端使用crypto-js來(lái)實(shí)現(xiàn),后端使用java本身的加密算法實(shí)現(xiàn),但遇到了一個(gè)問(wèn)題:java本身只支持NoPadding和PKCS5Padding,而crypto-js提供的padding方式?jīng)]有PKCS5Padding,所以不得以,前后端最終使用PKCS7Padding來(lái)實(shí)現(xiàn)功能.因此只能通過(guò)引入第三方j(luò)ar包的方式讓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);}}
總結(jié)
到此這篇關(guān)于Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. JSP之表單提交get和post的區(qū)別詳解及實(shí)例2. asp讀取xml文件和記數(shù)3. Xml簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理4. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案5. JSP+Servlet實(shí)現(xiàn)文件上傳到服務(wù)器功能6. ASP常用日期格式化函數(shù) FormatDate()7. UDDI FAQs8. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法9. HTML <!DOCTYPE> 標(biāo)簽10. CSS可以做的幾個(gè)令你嘆為觀止的實(shí)例分享
