java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例
本文實(shí)例講述了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能。分享給大家供大家參考,具體如下:
這里的Aes加密解密方法使用Hex進(jìn)行了編碼解碼
package com.baidu.wallet.bdwallet.utils;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
public class Test {
private static final String AES="AES";
private static final String UTF8="UTF-8";
/**
* AES加密
* @param content
* @param pkey
* @return
* @throws DecoderException
*/
private static byte[] encrypt(String content, String pkey) throws DecoderException {
try {
String private_key=pkey;
byte[] encodeFormat=null;
try {
//秘鑰 Hex解碼為什么秘鑰要進(jìn)行解碼,因?yàn)槊罔€是某個(gè)秘鑰明文進(jìn)行了Hex編碼后的值,所以在使用的時(shí)候要進(jìn)行解碼
encodeFormat = Hex.decodeHex(private_key.toCharArray());
} catch (DecoderException e) {
e.printStackTrace();
}
SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
// Cipher對(duì)象實(shí)際完成加密操作
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 加密內(nèi)容進(jìn)行編碼
byte[] byteContent = content.getBytes(UTF8);
// 用密匙初始化Cipher對(duì)象
cipher.init(Cipher.ENCRYPT_MODE, key);
// 正式執(zhí)行加密操作
byte[] result = cipher.doFinal(byteContent);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* AES解密
* @param contents
* @param password
* @return
* @throws DecoderException
*/
private static byte[] decrypt(String contents, String password) throws DecoderException {
try {
//密文使用Hex解碼
byte[]content = Hex.decodeHex(contents.toCharArray());
//秘鑰 Hex解碼為什么秘鑰要進(jìn)行解碼,因?yàn)槊罔€是某個(gè)秘鑰明文進(jìn)行了Hex編碼后的值,所以在使用的時(shí)候要進(jìn)行解碼
byte[] encodeFormat = Hex.decodeHex(password.toCharArray());
SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
// Cipher對(duì)象實(shí)際完成加密操作
Cipher cipher = Cipher.getInstance(AES);
// 用密匙初始化Cipher對(duì)象
cipher.init(Cipher.DECRYPT_MODE, key);
// 正式執(zhí)行解密操作
byte[] result = cipher.doFinal(content);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* Aes加密
* @param context 明文
* @param private_key 秘鑰
* @return
* @throws DecoderException
*/
public static String encryption(String context,String private_key) throws DecoderException{
//加密后的明文也就變成了密文
byte[] encryptResult = encrypt(context, private_key);
//密碼文Hex編碼
String encryptResultStr = Hex.encodeHexString(encryptResult);
return encryptResultStr;
}
/**
* Aes解密
* @param context 密文
* @param private_key 秘鑰
* @return
* @throws DecoderException
* @throws UnsupportedEncodingException
*/
public static String decryption(String context,String private_key) throws DecoderException, UnsupportedEncodingException{
//這里的密文解密前先進(jìn)行了Hex解碼
byte[] decryptResult = decrypt(context, private_key);
String result = new String(decryptResult, UTF8);
return result;
}
public static void main(String[] args) throws UnsupportedEncodingException, DecoderException {
//加密內(nèi)容
String content = "123456787654321";
//AES加密解密秘鑰
String password = "這個(gè)值一般都是給定的,雙發(fā)都知道";
// 加密
System.out.println("加密前:" + content);
// 調(diào)用加密方法
String encryptResultStr = encryption(content, password);
System.out.println("加密后:" + encryptResultStr);
// 調(diào)用解密方法
String result = decryption(encryptResultStr, password);
// 解密內(nèi)容進(jìn)行解碼
System.out.println("解密后:" + result);
}
}
這個(gè)方法在正式的項(xiàng)目中已經(jīng)在使用木有問(wèn)題,注意這里的AES加密解密你要要對(duì)哦……
上面使用的就是org.apache.commons.codec.binary.Hex這個(gè)類(lèi)的方法,在maven中配置如下:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.4</version> </dependency>
注意:這里要使用1.4以及以上版本,應(yīng)為1.4以下的沒(méi)有Hex.encodeHexString(byte[])這個(gè)方法!
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
密碼安全性在線檢測(cè):
http://tools.jb51.net/password/my_password_safe
高強(qiáng)度密碼生成器:
http://tools.jb51.net/password/CreateStrongPassword
迅雷、快車(chē)、旋風(fēng)URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java AES256加密解密示例代碼
- java使用RSA與AES加密解密的實(shí)例代碼詳解
- Java使用Hutool實(shí)現(xiàn)AES、DES加密解密的方法
- Java使用AES加密和解密的實(shí)例詳解
- Java AES加密解密的簡(jiǎn)單實(shí)現(xiàn)方法
- Java與Node.js利用AES加密解密出相同結(jié)果的方法示例
- Java實(shí)現(xiàn)的AES256加密解密功能示例
- java基于AES對(duì)稱(chēng)加密算法實(shí)現(xiàn)的加密與解密功能示例
- Android、iOS和Java通用的AES128加密解密示例代碼
- JAVA中AES對(duì)稱(chēng)加密和解密過(guò)程
- Java AES加密和解密教程
相關(guān)文章
java11新特性之集合轉(zhuǎn)換為數(shù)組的方法
Java11引入了一種將帶有泛型的集合轉(zhuǎn)換為帶有泛型的數(shù)組的簡(jiǎn)單方法,本文通過(guò)實(shí)例代碼介紹java11新特性之集合轉(zhuǎn)換為數(shù)組的操作方法,感興趣的朋友跟隨小編一起看看吧2024-06-06
java開(kāi)發(fā)的工廠方法模式及抽象工廠驗(yàn)證示例
這篇文章主要為大家介紹了java開(kāi)發(fā)中的工廠方法模式以及抽象工廠的驗(yàn)證示例,有需要的朋友可以借鑒參考下希望能夠有所幫助祝大家多多進(jìn)步2021-10-10
springboot啟動(dòng)的注意事項(xiàng)之不同包下有同樣名字的class類(lèi)問(wèn)題
這篇文章主要介紹了springboot啟動(dòng)的注意事項(xiàng)之不同包下有同樣名字的class類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的方法
這篇文章主要給大家介紹了關(guān)于Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
SpringMVC配置攔截器實(shí)現(xiàn)登錄控制的方法
這篇文章主要介紹了SpringMVC配置攔截器實(shí)現(xiàn)登錄控制的方法,SpringMVC讀取Cookie判斷用戶(hù)是否登錄,對(duì)每一個(gè)action都要進(jìn)行判斷,有興趣的可以了解一下。2017-03-03
Synchronized?和?ReentrantLock?的實(shí)現(xiàn)原理及區(qū)別
這篇文章主要介紹了Synchronized?和?ReentrantLock?的實(shí)現(xiàn)原理及區(qū)別,文章為榮啊主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
Java數(shù)據(jù)結(jié)構(gòu)中關(guān)于AVL樹(shù)的實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中關(guān)于AVL樹(shù)的實(shí)現(xiàn)方法,AVL樹(shù)是高度平衡的二叉樹(shù),它的特點(diǎn)是AVL樹(shù)中任何節(jié)點(diǎn)的兩個(gè)子樹(shù)的高度最大差別為1,本文主要給大家介紹了Java語(yǔ)言如何實(shí)現(xiàn)AVL樹(shù),需要的朋友可以參考下2024-02-02

