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)在使用木有問題,注意這里的AES加密解密你要要對(duì)哦……
上面使用的就是org.apache.commons.codec.binary.Hex這個(gè)類的方法,在maven中配置如下:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.4</version> </dependency>
注意:這里要使用1.4以及以上版本,應(yīng)為1.4以下的沒有Hex.encodeHexString(byte[])這個(gè)方法!
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
密碼安全性在線檢測(cè):
http://tools.jb51.net/password/my_password_safe
高強(qiáng)度密碼生成器:
http://tools.jb51.net/password/CreateStrongPassword
迅雷、快車、旋風(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ì)稱加密算法實(shí)現(xiàn)的加密與解密功能示例
- Android、iOS和Java通用的AES128加密解密示例代碼
- JAVA中AES對(duì)稱加密和解密過程
- Java AES加密和解密教程
相關(guān)文章
Java源碼解析重寫鎖的設(shè)計(jì)結(jié)構(gòu)和細(xì)節(jié)
這篇文章主要為大家介紹了Java源碼解析重寫鎖的設(shè)計(jì)結(jié)構(gòu)和細(xì)節(jié),這小節(jié)我們以共享鎖作為案列,自定義一個(gè)共享鎖。有需要的朋友可以借鑒參考下2022-03-03Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼
這篇文章主要介紹了Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼,需要的朋友可以參考下2020-10-10Java客戶端調(diào)用.NET的WebService實(shí)例
下面小編就為大家?guī)硪黄狫ava客戶端調(diào)用.NET的WebService實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09java實(shí)現(xiàn)簡(jiǎn)單網(wǎng)絡(luò)象棋游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單網(wǎng)絡(luò)象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12關(guān)于java連接池/線程池/內(nèi)存池/進(jìn)程池等匯總分析
這篇文章主要介紹了關(guān)于java連接池/線程池/內(nèi)存池/進(jìn)程池等匯總分析,本文將介紹池技術(shù)的由來、原理、優(yōu)缺點(diǎn)以及常見的池技術(shù)類型,需要的朋友可以參考下2023-04-04