Java原生方法實(shí)現(xiàn) AES 算法示例
本文實(shí)例講述了Java原生方法實(shí)現(xiàn) AES 算法。分享給大家供大家參考,具體如下:
AES(Advanced Encryption Standard)高級(jí)加密標(biāo)準(zhǔn),在密碼學(xué)中又稱 Rijndael 加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn) 。 這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的 DES ,已經(jīng)被多方分析且廣為全世界所使用 。 現(xiàn)已成為對(duì)稱密鑰加密中最流行的算法之一 。
/** * AES 算法 * <p/> * 算法采用加密模式:CBC;數(shù)據(jù)塊:128;填充:PKCS5Padding * <p/> * key 與向量字符串的長(zhǎng)度為 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 與 向量字符串的長(zhǎng)度 */ 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 不存在,或者長(zhǎng)度不為 " + LENGTH); } if (ivParameter == null || ivParameter.length() != LENGTH) { throw new AESException("ivParameter 不存在,或者長(zhǎng)度不為 " + 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); } } }
單元測(cè)試:
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緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡(jiǎn)單聊天功能
這篇文章主要介紹了Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡(jiǎn)單聊天功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Spring boot集成redis lettuce代碼實(shí)例
這篇文章主要介紹了Spring boot集成redis lettuce代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串2種方法
在我們?nèi)粘i_(kāi)發(fā)中,在前后端交互的時(shí)候會(huì)遇到多個(gè)id或其他字段存放到一個(gè)字段中,這時(shí)我們會(huì)遇到一個(gè)List(集合)---->String(單個(gè)字段),這篇文章主要給大家介紹了關(guān)于java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串的2種方法,需要的朋友可以參考下2023-10-10Mybatis-plus一對(duì)多分頁(yè)數(shù)據(jù)條數(shù)不正確的處理
這篇文章主要介紹了Mybatis-plus一對(duì)多分頁(yè)數(shù)據(jù)條數(shù)不正確的處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Spring AOP與代理類(lèi)的執(zhí)行順序級(jí)別淺析
這篇文章主要介紹了Spring AOP與代理類(lèi)的執(zhí)行順序級(jí)別,關(guān)于 Spring AOP和Aspectj的關(guān)系,兩個(gè)都實(shí)現(xiàn)了切面編程,Spring AOP更多地是為了Spring框架本身服務(wù)的,而Aspectj具有更強(qiáng)大、更完善的切面功能2023-03-03MyBatis-Plus自動(dòng)填充功能失效導(dǎo)致的原因及解決
這篇文章主要介紹了MyBatis-Plus自動(dòng)填充功能失效導(dǎo)致的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02java基于odbc連接oracle的實(shí)現(xiàn)方法
這篇文章主要介紹了java基于odbc連接oracle的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了連接操作的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-09-09SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式
這篇文章主要介紹了SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09