Java原生方法實(shí)現(xiàn) AES 算法示例
本文實(shí)例講述了Java原生方法實(shí)現(xiàn) AES 算法。分享給大家供大家參考,具體如下:
AES(Advanced Encryption Standard)高級加密標(biāo)準(zhǔn),在密碼學(xué)中又稱 Rijndael 加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn) 。 這個標(biāo)準(zhǔn)用來替代原先的 DES ,已經(jīng)被多方分析且廣為全世界所使用 。 現(xiàn)已成為對稱密鑰加密中最流行的算法之一 。
/**
* AES 算法
* <p/>
* 算法采用加密模式:CBC;數(shù)據(jù)塊:128;填充:PKCS5Padding
* <p/>
* key 與向量字符串的長度為 16 位
*
* @author Deniro Li (lisq037@163.com)
* 2018/3/17
*/
public class AES {
/**
* 算法名稱
*/
public static final String NAME = "AES";
/**
* 加密模式:CBC;數(shù)據(jù)塊:128;填充:PKCS5Padding
*/
public final String MODE = "AES/CBC/PKCS5Padding";
/**
* KEY 與 向量字符串的長度
*/
public static final int LENGTH = 16;
/**
* 加密用的 KEY
*/
private String key;
/**
* 向量,用于增加加密強(qiáng)度
*/
private String ivParameter;
/**
* @param key 加密用的 KEY
* @param ivParameter 偏移量
*/
public AES(String key, String ivParameter) {
if (key == null || key.length() != LENGTH) {
throw new AESException("KEY 不存在,或者長度不為 " + LENGTH);
}
if (ivParameter == null || ivParameter.length() != LENGTH) {
throw new AESException("ivParameter 不存在,或者長度不為 " + LENGTH);
}
this.key = key;
this.ivParameter = ivParameter;
}
/**
* 加密
*
* @param s 要加密的字符串
* @return 加密后的字符串
*/
public String encode(String s) {
String result;
try {
Cipher cipher = Cipher.getInstance(MODE);
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), NAME), iv);
byte[] bytes = cipher.doFinal(s.getBytes(ENCODING));
result = new BASE64Encoder().encode(bytes);
} catch (Exception e) {
throw new AESException("加密", e);
}
return result;
}
/**
* 解密
*
* @param s 待解密的字符串
* @return 解密后的字符串
*/
public String decode(String s) {
try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("ASCII"), NAME);
Cipher cipher = Cipher.getInstance(MODE);
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
return new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(s)), ENCODING);
} catch (Exception e) {
throw new AESException("解密", e);
}
}
}
單元測試:
public class AESTest {
AES aes;
@Before
public void init(){
aes=new AES("12345abcdef67890","1234567890abcdef");
}
@Test
public void testEncode() throws Exception {
Assert.assertEquals("jANei3LBvnLCaZ2XddWHZw==", aes.encode("123456"));
}
@Test
public void testDecode() throws Exception {
Assert.assertEquals("123456", aes.decode("jANei3LBvnLCaZ2XddWHZw=="));
}
}
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線散列/哈希算法加密工具:
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
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
Java開發(fā)編程到底是用idea好還是eclipse好
這篇文章主要介紹了Java開發(fā)編程到底是用idea好還是eclipse好,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Spring Data JPA 建立表的聯(lián)合主鍵
這篇文章主要介紹了Spring Data JPA 建立表的聯(lián)合主鍵。本文詳細(xì)的介紹了2種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
Java網(wǎng)絡(luò)通信基礎(chǔ)編程(必看篇)
下面小編就為大家?guī)硪黄狫ava網(wǎng)絡(luò)通信基礎(chǔ)編程(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
java模擬ajax訪問另一個項目的controller代碼實(shí)例
今天小編就為大家分享一篇關(guān)于java模擬ajax訪問另一個項目的controller代碼實(shí)例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
jdbc實(shí)現(xiàn)寵物商店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了jdbc實(shí)現(xiàn)寵物商店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-10-10
詳解Spring boot上配置與使用mybatis plus
這篇文章主要介紹了詳解Spring boot上配置與使用mybatis plus,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05

