摘要:一般都聽說過加密技術(shù),加密確實強大。補充剛學習的時候,看到網(wǎng)上有人把密鑰字節(jié)碼轉(zhuǎn)變成字符串保存,然后用來加密解密的時候,很有可能出錯。因為不同語言的原因,字符串轉(zhuǎn)變成字節(jié)碼就有可能不再是原來的字節(jié)碼了。
一般都聽說過MD5加密技術(shù),MD5加密確實強大。但那是非對稱加密技術(shù),也就是說從密文變成明文不是那么容易。當我們需要一種對稱性加密技術(shù),MD5就不適用了。比如視頻加密解密,此時就可以用ASE加密解密了。
AES有更安全、靈活、有效率等優(yōu)點,使用范圍也很廣,所以今天就講講AES加密如何使用,這里以java開展。
密鑰就是把明文轉(zhuǎn)換為密文,密文轉(zhuǎn)換為明文的一把鑰匙。接下來我們會用ASE加密技術(shù)生成一把密鑰。
public void generateSecretKey() { KeyGenerator keyGenerator = null; FileOutputStream fos = null; try { keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(128);//size SecretKey secretKey = keyGenerator.generateKey(); byte[] keyBytes = secretKey.getEncoded(); fos = new FileOutputStream("key"); fos.write(keyBytes); } catch (Exception e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } }
keyGenerator.init(128); 這里是初始化密鑰的長度。翻看底層代碼,發(fā)現(xiàn)密鑰支持的長度為:128, 192 or 256。我們這里是128位的長度,也就是16byte。
補充: 剛學習的時候,看到網(wǎng)上有人把密鑰(字節(jié)碼)轉(zhuǎn)變成字符串保存,然后用來加密解密的時候,很有可能出錯。因為不同語言的原因,字符串轉(zhuǎn)變成字節(jié)碼就有可能不再是原來的字節(jié)碼了。
密鑰生成后,在項目目錄下可以找到一個key文件。
加密將明文和密鑰一起,作為參數(shù)傳入。
/** * ASE 加密 * @param str 明文 * @param key 秘鑰 * @return */ public static String enStr(String str, byte[] key) { Cipher cipher = null; SecretKey generateKey = null; try { generateKey = new SecretKeySpec(key, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, generateKey); byte[] resultBytes = cipher.doFinal(str.getBytes()); return Hex.encodeHexString(resultBytes); } catch (Exception e) { logger.error("AES加密出錯", e); } return null; }解密
解密就是加密的互逆過程,所以代碼很類似。
/** * 解密 * @param key 秘鑰 * @param str 密文 * @return */ public static String deStr(String str, byte[] key) { Cipher cipher = null; SecretKey generateKey = null; try { generateKey = new SecretKeySpec(key, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, generateKey); byte[] result = Hex.decodeHex(str.toCharArray()); return new String(cipher.doFinal(result)); } catch(Exception e) { logger.error("ASE解密出錯", e); } return null; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70058.html
摘要:內(nèi)容主要有四個方面趨勢基礎(chǔ)實踐調(diào)試。一趨勢這一章節(jié)主要介紹近幾年和未來的趨勢,包括兩大瀏覽器和對的態(tài)度,以及淘寶天貓和阿里云的實踐情況。完整性是指為了避免網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)被非法篡改,使用算法來保證消息的完整性。 摘要: 本文邀請阿里云CDN HTTPS技術(shù)專家金九,分享Tengine的一些HTTPS實踐經(jīng)驗。內(nèi)容主要有四個方面:HTTPS趨勢、HTTPS基礎(chǔ)、HTTPS實踐、HTTPS...
閱讀 2849·2021-11-19 09:40
閱讀 3709·2021-11-15 18:10
閱讀 3290·2021-11-11 16:55
閱讀 1246·2021-09-28 09:36
閱讀 1663·2021-09-22 15:52
閱讀 3376·2019-08-30 14:06
閱讀 1171·2019-08-29 13:29
閱讀 2318·2019-08-26 17:04