您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用Java怎么實現(xiàn)一個AES 算法,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
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==")); } }
關(guān)于使用Java怎么實現(xiàn)一個AES 算法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。