您好,登錄后才能下訂單哦!
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如何進行加解密大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。