欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法

 更新時(shí)間:2020年08月12日 08:32:53   作者:Tiro8183  
這篇文章主要介紹了Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近項(xiàng)目需要選擇一套對(duì)稱(chēng)加密算法,來(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

引入依賴(lài)

<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)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 當(dāng)Mybatis遇上目錄樹(shù)超全完美解決方案

    當(dāng)Mybatis遇上目錄樹(shù)超全完美解決方案

    這篇文章主要介紹了當(dāng)Mybatis遇上目錄樹(shù)有哪些解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • spring cloud學(xué)習(xí)入門(mén)之config配置教程

    spring cloud學(xué)習(xí)入門(mén)之config配置教程

    這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)入門(mén)之config配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Java與kotlin詳細(xì)對(duì)比

    Java與kotlin詳細(xì)對(duì)比

    這篇文章主要介紹了Java與kotlin詳細(xì)對(duì)比,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 關(guān)于idea剛打開(kāi)時(shí)瘋狂報(bào)錯(cuò)的問(wèn)題

    關(guān)于idea剛打開(kāi)時(shí)瘋狂報(bào)錯(cuò)的問(wèn)題

    這篇文章主要介紹了關(guān)于idea剛打開(kāi)時(shí)瘋狂報(bào)錯(cuò)的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

    SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,允許服務(wù)器主動(dòng)向客戶端推送信息,同時(shí)也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-08-08
  • 淺談System.getenv()和System.getProperty()的區(qū)別

    淺談System.getenv()和System.getProperty()的區(qū)別

    這篇文章主要介紹了System.getenv()和System.getProperty()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 解讀Spring-boot的debug調(diào)試

    解讀Spring-boot的debug調(diào)試

    這篇文章主要介紹了解讀Spring-boot的debug調(diào)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • java開(kāi)發(fā)實(shí)現(xiàn)訂閱到貨通知幫我們買(mǎi)到想買(mǎi)的東西

    java開(kāi)發(fā)實(shí)現(xiàn)訂閱到貨通知幫我們買(mǎi)到想買(mǎi)的東西

    這篇文章主要為大家介紹了java開(kāi)發(fā)實(shí)現(xiàn)訂閱到貨通知幫我們買(mǎi)到想買(mǎi)的東西示例demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java返回json請(qǐng)求中文變成問(wèn)號(hào)的問(wèn)題及解決

    java返回json請(qǐng)求中文變成問(wèn)號(hào)的問(wèn)題及解決

    這篇文章主要介紹了java返回json請(qǐng)求中文變成問(wèn)號(hào)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • JAVA偏向鎖的原理與實(shí)戰(zhàn)

    JAVA偏向鎖的原理與實(shí)戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了JAVA偏向鎖的原理與實(shí)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論