十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家介紹使用Java怎么實(shí)現(xiàn)一個(gè)AES 算法,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(成都創(chuàng)新互聯(lián)公司).為客戶提供專業(yè)的遂寧服務(wù)器托管,四川各地服務(wù)器托管,遂寧服務(wù)器托管、多線服務(wù)器托管.托管咨詢專線:13518219792
AES(Advanced Encryption Standard)高級(jí)加密標(biāo)準(zhǔn),在密碼學(xué)中又稱 Rijndael 加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn) 。 這個(gè)標(biāo)準(zhǔn)用來替代原先的 DES ,已經(jīng)被多方分析且廣為全世界所使用 。 現(xiàn)已成為對(duì)稱密鑰加密中最流行的算法之一 。
/** * AES 算法 * * 算法采用加密模式:CBC;數(shù)據(jù)塊:128;填充:PKCS5Padding * * 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); } } }
單元測(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==")); } }
關(guān)于使用Java怎么實(shí)現(xiàn)一個(gè)AES 算法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。