Java實(shí)現(xiàn)的AES256加密解密功能示例
本文實(shí)例講述了Java實(shí)現(xiàn)的AES256加密解密功能。分享給大家供大家參考,具體如下:
一.代碼
package com.handler;
import java.io.UnsupportedEncodingException;
import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AES256Encryption{
public static final String KEY_ALGORITHM="AES";
public static final String CIPHER_ALGORITHM="AES/ECB/PKCS7Padding";
public static byte[] initkey() throws Exception{
//實(shí)例化密鑰生成器
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM, "BC");
kg.init(256);
kg.init(128);
SecretKey secretKey=kg.generateKey();
return secretKey.getEncoded();
}
public static byte[] initRootKey() throws Exception{
return new byte[] { 0x08, 0x08, 0x04, 0x0b, 0x02, 0x0f, 0x0b, 0x0c,
0x01, 0x03, 0x09, 0x07, 0x0c, 0x03, 0x07, 0x0a, 0x04, 0x0f,
0x06, 0x0f, 0x0e, 0x09, 0x05, 0x01, 0x0a, 0x0a, 0x01, 0x09,
0x06, 0x07, 0x09, 0x0d };
}
public static Key toKey(byte[] key) throws Exception{
SecretKey secretKey=new SecretKeySpec(key,KEY_ALGORITHM);
return secretKey;
}
public static byte[] encrypt(byte[] data,byte[] key) throws Exception{
Key k=toKey(key);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC");
cipher.init(Cipher.ENCRYPT_MODE, k);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data,byte[] key) throws Exception{
Key k =toKey(key);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC");
cipher.init(Cipher.DECRYPT_MODE, k);
return cipher.doFinal(data);
}
public static void main(String[] args) throws UnsupportedEncodingException{
String str="蕓sweet";
//打印原文
System.out.println("原文:"+str);
//密鑰
byte[] key;
try {
//生成隨機(jī)密鑰
key = AES256Encryption.initkey();
//打印密鑰
System.out.print("密鑰:");
for(int i = 0;i
System.out.printf("%x", key[i]);
}
System.out.print("n");
//加密
byte[] data=AES256Encryption.encrypt(str.getBytes(), key);
//打印密文
System.out.print("加密后:");
for(int i = 0;i
System.out.printf("%x", data[i]);
}
System.out.print("n");
//解密密文
data=AES256Encryption.decrypt(data, key);
//打印原文
System.out.println("解密后:"+new String(data));
} catch (Exception e) {
e.printStackTrace();
}
二.注意
1.需要在工程中引入 bcprov-jdk15-133.jar
本站下載鏈接。
2.替換jrelibsecurity下的local_policy.jar 和 US_export_policy.jar
1)如果程序使用是系統(tǒng)jdk,則替換系統(tǒng)環(huán)境變量的jdk中jrelibsecurity下的jar包。
2)如果程序是在MyEclipse中運(yùn)行,則找到MyEclipse使用的jdk(方法:在MyEclipse里面進(jìn)入window->Preferences->java選項(xiàng)里面有一個(gè)Installed JREs的選項(xiàng),點(diǎn)擊右邊會(huì)出現(xiàn)一個(gè)列表,里面有你現(xiàn)在用到的JDK版本及路徑),替換該jdk中jrelibsecurity下的jar包。
可以解決:java.security.InvalidKeyException: Illegal key size or default parameters異常
三.如果密鑰需要存入數(shù)據(jù)庫(kù),則需要對(duì)密鑰進(jìn)行base64編碼,即將密鑰(byte數(shù)組)通過(guò)base64編碼轉(zhuǎn)換成密鑰(String類型);從數(shù)據(jù)庫(kù)中讀取密鑰時(shí),則使用base64解碼,即將密鑰(String類型)轉(zhuǎn)換成密鑰(byte數(shù)組)。詳見《Java實(shí)現(xiàn)base64編碼》
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
迅雷、快車、旋風(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ì)有所幫助。
相關(guān)文章
詳解Elastic Search搜索引擎在SpringBoot中的實(shí)踐
本篇文章主要介紹了Elastic Search搜索引擎在SpringBoot中的實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
java實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
jmeter接口測(cè)試教程及接口測(cè)試流程詳解(全網(wǎng)僅有)
Jmeter是由Apache公司開發(fā)的一個(gè)純Java的開源項(xiàng)目,即可以用于做接口測(cè)試也可以用于做性能測(cè)試。本文給大家分享jmeter接口測(cè)試教程及接口測(cè)試流程,感興趣的朋友跟隨小編一起看看吧2021-12-12
Springboot Thymeleaf字符串對(duì)象實(shí)例解析
這篇文章主要介紹了Springboot Thymeleaf字符串對(duì)象實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2007-09-09
Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決
這篇文章主要介紹了Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
springboot中使用ElasticSearch的詳細(xì)教程
這篇文章主要介紹了ElasticSearch在springboot中使用的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
基于springboot搭建的web系統(tǒng)架構(gòu)的方法步驟
這篇文章主要介紹了基于springboot搭建的web系統(tǒng)架構(gòu)的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04

