Java實現AES加密
一、什麼是AES?
AES:Advanced Encrypt Standard 高階加密標準。使用AES是為了代替原先的DES,現如今已被廣泛使用。
相較於DES,使用56位祕鑰,比較容易被破解。AES可以使用128、192和256位祕鑰,並且使用128位分組加密和解密資料,安全很多。完善的加密演算法在理論上幾乎是不可被破解的,除非使用窮盡法。但使用窮盡法破解祕鑰長度在128位以上的加密資料是不現實的,即使採用世界上最快的計算機,窮盡128位祕鑰也要花上幾十億年的時間。
AES是對稱加密演算法,因為加密和解密的金鑰是同一個。
二、AES加密
Java對各種加密解密演算法都已經有了很好的封裝,我們需要做的只是引入現有的方法即可。
/** * AES加密字串 * * @param content 需要被加密的字串 * @param password 加密需要的密碼 * @return 密文 */ public static byte[] encrypt(String content, String password) { try { // 建立AES的Key生產者 KeyGenerator kgen = KeyGenerator.getInstance("AES"); // 利用使用者密碼作為隨機數初始化出128位的key生產者 // SecureRandom是生成安全隨機數序列,password.getBytes()是種子, // 只要種子相同,序列就一樣,所以解密只要有password就行 kgen.init(128, new SecureRandom(password.getBytes())); // 根據使用者密碼,生成一個金鑰 SecretKey secretKey = kgen.generateKey(); // 返回基本編碼格式的金鑰,如果此金鑰不支援編碼,則返回 byte[] enCodeFormat = secretKey.getEncoded(); // 轉換為AES專用金鑰 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); // 建立密碼器 Cipher cipher = Cipher.getInstance("AES"); byte[] byteContent = content.getBytes("utf-8"); // 初始化為加密模式的密碼器 cipher.init(Cipher.ENCRYPT_MODE, key); // 加密 byte[] result = cipher.doFinal(byteContent); return result; } catch (NoSuchPaddingException | NoSuchAlgorithmException | UnsupportedEncodingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } return null; }
三、AES解密
其實加密解密,簡單說就是cipher初始化的模式,加密就是ENCRYPT_MODE、解密就是DECRYPT_MODE
/** * 解密AES加密過的字串 * * @param content AES加密過過的內容 * @param password 加密時的密碼 * @return 明文 */ public static byte[] decrypt(byte[] content, String password) { try { // 建立AES的Key生產者 這些與加密時保持一致 KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); // 根據使用者密碼,生成一個金鑰 SecretKey secretKey = kgen.generateKey(); // 返回基本編碼格式的金鑰 byte[] enCodeFormat = secretKey.getEncoded(); // 轉換為AES專用金鑰 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); // 建立密碼器 Cipher cipher = Cipher.getInstance("AES"); // 初始化為解密模式的密碼器 cipher.init(Cipher.DECRYPT_MODE, key); // 返回明文 byte[] result = cipher.doFinal(content); return result; } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } return null; }
四、測試程式碼
public static void main(String[] args) {
String content = "測試 hello world";
String password = "123456";
System.out.println("加密之前:" + content);
// 加密
byte[] encrypt = encrypt(content, password);
System.out.println("加密後的內容:" + new String(encrypt));
// 解密
byte[] decrypt = decrypt(encrypt, password);
System.out.println("解密後的內容:" + new String(decrypt));
}
加密之前:測試 hello world
加密後的內容:��k8����
解密後的內容:測試 hello world
加密之後的內容是亂碼,可以通過進位制轉換轉為16進位制進行正常顯示。
相關推薦
用Java實現AES加密(轉)
密鑰 工具 mex 嚴格 keys 生產 ner for 創建 一)什麽是AES? 高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),是一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。 那麽為什麽
JAVA 實現AES加密的兩種方法
寫在前面的話: 1.建議加密後將密文轉為16進位制的字串(便於觀看)。 2.以下的兩種加密的方法金鑰不限定長度。[java] view plain copy print?/** *AES加密解密工具類 *@author M-Y */ public clas
Java實現AES加密和解密
/** * @param content * @return String * @Description:解密流程: * 1.同加密1-4步 * 2.將加密後的字串反紡成byte[]陣列 * 3.將加密內容解密 */ public stati
Java實現AES加密
一、什麼是AES? AES:Advanced Encrypt Standard 高階加密標準。使用AES是為了代替原先的DES,現如今已被廣泛使用。 相較於DES,使用56位祕鑰,比較容易被破解。AES可以使用128、192和256位祕鑰,並且使用128位分組加密和解密資
java實現AES加密解密
package com.utils; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpe
Java實現AES加密,異常java.security.InvalidKeyException: Illegal key size 的解決
sta extension ons jdk mit jar文件 目錄 jdk7 ase Java實現AES加密,拋出異常如下:java.security.InvalidKeyException: Illegal key size 代碼參考 http://my.oschi
java實現AES方式加密
AES加密import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingE
java實現AES的簡單加密解密
AESUtil package com.zhuyun.aes; import java.io.IOException; import javax.crypto.Cipher; import ja
java和js實現aes加密解密
由於公司安全測試,要對重要資訊進行加密傳輸,使得java、android、ios一致。 java程式碼 package gov.communitycloud.user.utils; import java.math.BigInteger; import javax.cr
java實現對稱加密AES和DES的加密、解密
目前主流的加密方式有:1、對稱加密:AES、DES 2、非對稱加密:RSA、DSA。 本文主要講解java實現呼叫AES/DES加密演算法包,呼叫過程最精要的就是下面兩句話: Cipher cipher = Cipher.getIn
【工具類】Java實現AES演算法 加密和解密
最近在學AES加密,通過網上學習查詢資料,封裝了一個AES加密解密工具類,說幾點: 演算法/模式/填充,這個最好使用"AES/CBC/PKCS5Padding","ECB"在IOS中不安全(網上查詢資料得知),不要使用預設填充引數金鑰要使用16位,不使用"AES/CBC/
aNDROID實現aEs加密技術
android java .com and androi aid ava lis 加密 JaVa%E9%9D%A2%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%98%E5%A4%A7%E6%B1%87%E6%80%BB%282%29 http://m
C# 實現AES加密--解密
bsp 密文 rem adding gets manage string sys cipher /// <summary> /// AES 加密 /// </summary> ///
JAVA實現DES加密實現詳解
ava util des算法 直接 print uri ret secure 過程 package util; import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; import j
java實現md5加密
comm 代碼 inf 應用領域 ast center href 攻擊 字符串
**Java實現Base64加密**
package com.beiruan.test; import org.apache.commons.codec.binary.Base64; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public clas
條理清晰的入門:使用Java實現RSA加密解密
條理清晰的入門:使用Java實現RSA加密解密 什麼是RSA 使用Java 需要匯入的標頭檔案 生成公鑰、私鑰 進行加密解密 金鑰的儲存 密文的儲存、讀取 什麼是RSA 翻一下以前的密碼
CTR分組模式實現AES加密解密(go語言)
版權宣告:本文為作者原創,如需轉載,請註明出處 https://blog.csdn.net/weixin_42940826 AES演算法簡介 AES演算法是為了取代DES演算法而生,雖然3DES演算法仍然可以使用,但是效率比較低下,AES演算法是在眾多演算法中選拔
java實現AES&MD5加解密
AES: import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.bin
用java實現簡易加密和解密
實現原理: 通過位運算的異或運算子“^”把字串與一個指定的值進行異或運算,從而改變字串中的每個字元的值,這樣就可以得到一個加密後的字串。傳送後再將加密後的字串通過源程式實現解