您好,登錄后才能下訂單哦!
Java中AES/CBC/PKCS7Padding如何進(jìn)行加解密?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
最近項(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); } }
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)Java中AES/CBC/PKCS7Padding如何進(jìn)行加解密大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。