1. 程式人生 > >AES加解密字串詳解

AES加解密字串詳解

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * AES工具類;
 *	用於對資訊進行加解密的AES工具類;
 * @author MaLinQing
 *
 */
public class AESUtils {
	
	private AESUtils() {}//靜態工具類,不需要new物件;
	
	private static final Logger LOGGER =  LoggerFactory.getLogger("passengerLogger"); 
	private static final String password ="gjh%^&(&  {}77";//加解密時所需的密碼,內部使用可以直接寫死,外部呼叫
動態傳輸可以直接在形參中定義 /** * AES加密字串 * * @param content * 需要被加密的字串 * @return 密文 */ public static String encrypt(String content) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES");//構造金鑰生成器,指定為AES演算法,不區分大小寫 kgen.init(128, new SecureRandom(password.getBytes()));//根據傳入的位元組陣列,生成一個128位的隨機源 SecretKey secretKey = kgen.generateKey();// 產生原始對稱金鑰 byte[] enCodeFormat = secretKey.getEncoded();// 獲得原始對稱金鑰的位元組陣列 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");//根據位元組陣列生成AES金鑰 Cipher cipher = Cipher.getInstance("AES");//根據指定演算法AES生成密碼器 byte[] byteContent = content.getBytes("UTF-8"); //將報文轉成位元組陣列 //(這裡要設定為utf-8)不然內容中如果有中文和英文混合中文就會解密為亂碼 cipher.init(Cipher.ENCRYPT_MODE, key);//初始化密碼器, byte[] ciphertext = cipher.doFinal(byteContent);// 加密 return (Base64.encode(ciphertext)); } catch (NoSuchPaddingException e) { LOGGER.error("生成cipher密碼器異常!異常資訊:{}",e); } catch (NoSuchAlgorithmException e) { LOGGER.error("無法通過AES加密演算法生成cipher異常!異常資訊:{}",e); } catch (UnsupportedEncodingException e) { LOGGER.error("byteContent-UTF-8字元轉換異常!異常資訊:{}",e); } catch (InvalidKeyException e) { LOGGER.error("cipher初始化失敗異常!異常資訊:{}",e); } catch (IllegalBlockSizeException e) { LOGGER.error("資料長度不正確導致報文加密失敗!異常資訊:{}",e); } catch (BadPaddingException e) { LOGGER.error("byteContent未正確轉換-導致報文加密失敗!異常資訊:{}",e); } return null; } /** * 解密AES加密過的字串 * * @param content * AES加密過過的內容 * @return 明文 */ public static String decrypt(String content) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES");//構造金鑰生成器,指定為AES演算法,不區分大小寫 kgen.init(128, new SecureRandom(password.getBytes()));//根據傳入的位元組陣列,生成一個128位的隨機源 SecretKey secretKey = kgen.generateKey();//產生原始對稱金鑰 byte[] enCodeFormat = secretKey.getEncoded();//獲得原始對稱金鑰的位元組陣列 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");//根據位元組陣列生成AES金鑰 Cipher cipher = Cipher.getInstance("AES");// 建立密碼器 cipher.init(Cipher.DECRYPT_MODE, key);// 初始化為解密模式的密碼器 byte[] byteContent= Base64.decode(content);//將密文解碼成位元組陣列 byte[] byteDecode = cipher.doFinal(byteContent); //解密; return new String(byteDecode,"UTF-8"); } catch (NoSuchAlgorithmException e) { LOGGER.error("無法通過AES加密演算法生成cipher異常!異常資訊:{}",e); } catch (NoSuchPaddingException e) { LOGGER.error("生成cipher密碼器異常!異常資訊:{}",e); } catch (InvalidKeyException e) { LOGGER.error("cipher初始化失敗異常!異常資訊:{}",e); } catch (IllegalBlockSizeException e) { LOGGER.error("資料長度不正確導致報文加密失敗!異常資訊:{}",e); } catch (BadPaddingException e) { LOGGER.error("byteContent未正確轉換-導致報文加密失敗!異常資訊:{}",e); } catch (UnsupportedEncodingException e) { LOGGER.error("byteDecode-UTF-8字元轉換異常!異常資訊:{}",e); } return null; } }


相關推薦

AES解密字串

import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.

關於JAVA中RSA籤,私鑰加密公鑰解密和公鑰加密私鑰解密程式碼

在專案中遇到的問題百度了許久總結出來的 私鑰加密公鑰解密和公鑰加密私鑰解密。 一般為了安全採用的是私鑰加密,公鑰解密(公鑰可以用Base64轉換後公開) package com.paic.ebank.creditcard.common.util; import java.s

基於PHP和JS的AES相互加密解密方法

原地址 :https://blog.csdn.net/zhihua_w/article/details/79388297 下載地址:https://download.csdn.net/download/weixin_38615720/10908675   在最近的專案中,

php AES 解密方法使用函數了

1、php中關於mcrypt加密的一些函式 1)mcrypt_get_iv_size — 返回指定演算法/模式組合的初始向量大小 int mcrypt_get_iv_size ( string $cipher , string $mode ) 2)mc

AES解密

ext ole gen public 去掉 ati 默認 cal algo public class AESHelper { /// <summary> /// 獲取密鑰 /// </summar

JVM類載機制(一)JVM類載過程

進行 虛擬機啟動 類加載的時機 bsp 參與 tro ext 環境 java代碼 首先Throws(拋出)幾個自己學習過程中一直疑惑的問題: 1、什麽是類加載?什麽時候進行類加載? 2、什麽是類初始化?什麽時候進行類初始化? 3、什麽時候會為變量分配內存? 4、什麽時候會為

Java類載機制

package itl prot 啟動 bool ddc 發現 很多 har 一、類加載器 類加載器(ClassLoader),顧名思義,即加載類的東西。在我們使用一個類之前,JVM需要先將該類的字節碼文件(.class文件)從磁盤、網絡或其他來源加載到內存中,並對字節碼進

虛擬機類載機制

cnblogs lpad 返回值 虛擬機啟動 rec 關鍵字 ted 抽象類 運行 目錄:   1.類加載的時機   2.類加載的過程   3.類加載器 一、類加載的時機   類從被加載到虛擬機內存中開始,到卸載除內存為止,他的整個生命周期包括:加載(Loading)、

Mysql鎖過程

插入記錄 控制 uniq null 詳細 server 讀者 index 理論知識 1、背景   MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死

Mysql鎖過程(4)-select for update/lock in share mode 對事務並發性影響

per inno targe 允許 evel transacti 修改 not null warn select for update/lock in share mode 對事務並發性影響 事務並發性理解 事務並發性,粗略的理解就是單位時間內能夠執行的事務數量,常見的單

Mysql鎖過程(9)-innodb下的記錄鎖,間隙鎖,next-key鎖

ans 唯一索引 crazy cimage -h insert tran 存在 gin Mysql加鎖過程詳解(1)-基本知識 Mysql加鎖過程詳解(2)-關於mysql 幻讀理解 Mysql加鎖過程詳解(3)-關於mysql 幻讀理解 Mysql加鎖過程詳解(4)-

Java中的AES解密

body 方式 keys enc aes加密 col decode 解密 encoder 直接上代碼,Base64使用的是Java8的方法,如沒有,替換即可 KEY:即密碼 IV:即偏移量,可自訂,十六位 加密方式:AES/CBC/PKCS5Padding,128位加密 如

載器

ota ssd 情況 fig itl 不為 tle 加載失敗 tor 首先來了解一下字節碼和class文件的區別: 我們知道,新建一個java對象的時候,JVM要將這個對象對應的字節碼加載到內存中,這個字節碼的原始信息存放在classpath(就是我們新建Java工程的bi

C++的AES解密

aes加解密 大致 filter aes buffere extern pos data rcp   最近公司項目要做個WPF程序,但是底層加密部分要用C++來實現。通過網上搜索各種資料,地址已經記不下了,沒發貼出來了! 下面看看如何加解密的~!先貼代碼。。。。 1

Java中的AES解密工具類:AESUtils

.com asc += for frame day 換行 fault mod 本人手寫已測試,大家可以參考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysC

https加密解密過程

http col 驗證 獲取 安裝 因此 私鑰 請求 描述 在日常互聯網瀏覽網頁時,我們接觸到的大多都是 HTTP 協議,這種協議是未加密,即明文的。這使得 HTTP 協議在傳輸隱私數據時非常不安全。因此,用於對 HTTP 協議傳輸進行數據加密,即 HTTPS 。 那麽我們

AES解密過程

secret keys nco vat 過程 encode string exception init 1 package com.pff.pff; 2 3 import java.security.SecureRandom; 4 5 import java

Java、C#雙語版配套AES解密示例

rijndael rand encrypt encoding res ace secret names tar   這裏采用的加解密使用base64轉碼方法,ECB模式,PKCS5Padding填充,密碼必須是16位,否則會報錯!   模式:Java的ECB對應C#的Sys

PHP命名空間與自動載類

命名 ech stat 自動 spl pla 空間 程序設計 php面向對象 本文實例講述了PHP命名空間與自動加載類。分享給大家供大家參考,具體如下:今天我要給大家介紹的是PHP的命名空間 和 自動加載類我先簡單的分開演示 在放在一起大家請看:什麽是自動加載類?想必大家都

Spring Boot 配置載順序

stack @value set setprop 變量 ram 文件 spa vat 使用 Spring Boot 會涉及到各種各樣的配置,如開發、測試、線上就至少 3 套配置信息了。Spring Boot 可以輕松的幫助我們使用相同的代碼就能使開發、測試、線上