Java AES256加密解密示例程式碼
阿新 • • 發佈:2020-01-07
Java支援許多安全的加密演算法,但是其中一些功能較弱,無法在安全性要求很高的應用程式中使用。例如,資料加密標準(DES)加密演算法被認為是高度不安全的。今天介紹一下AES 256加密解密。
什麼是AES 256?
- 高階加密標準 (英語:Advanced Encryption Standard,縮寫:AES ),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。
- AES是一種對稱加密演算法。它旨在易於在硬體和軟體以及受限環境中實施,並提供針對各種攻擊技術的良好防禦。AES是能夠使用大小為128、192和256位的金鑰處理128位塊的塊密碼。每個密碼分別使用128位,192位和256位的加密金鑰對128位塊中的資料進行加密和解密。它使用相同的金鑰進行加密和解密,因此傳送方和接收方都必須知道並使用相同的祕密金鑰。
在下面的加密和解密示例中,我在UTF-8字符集中使用了base64編碼。用於顯示程式的輸出。也可以以位元組陣列格式儲存和驗證資料。
AES 256加密
Java程式中,用於使用AES 256位對密碼(或任何資訊)進行加密。
private static String secretKey = "boooooooooom!!!!"; private static String salt = "ssshhhhhhhhhhh!!!!"; public static String encrypt(String strToEncrypt,String secret) { try { byte[] iv = { 0,0 }; IvParameterSpec ivspec = new IvParameterSpec(iv); SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); KeySpec spec = new PBEKeySpec(secretKey.toCharArray(),salt.getBytes(),65536,256); SecretKey tmp = factory.generateSecret(spec); SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(),"AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivspec); return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); } catch (Exception e) { System.out.println("Error while encrypting: " + e.toString()); } return null; }
AES 256解密
Java程式,用於使用AES 256位解密密碼(或任何資訊)。
private static String secretKey = "boooooooooom!!!!"; private static String salt = "ssshhhhhhhhhhh!!!!"; public static String decrypt(String strToDecrypt,String secret) { try { byte[] iv = { 0,"AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE,ivspec); return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); } catch (Exception e) { System.out.println("Error while decrypting: " + e.toString()); } return null; }
測試AES256加密和解密方法
用一個簡單的字串測試我們的AES256加密和解密方法
public static void main(String[] args) { String originalString = "www.csdn.net"; String encryptedString = AES.encrypt(originalString,secretKey) ; String decryptedString = AES.decrypt(encryptedString,secretKey) ; System.out.println(originalString); System.out.println(encryptedString); System.out.println(decryptedString); }
輸出結果
www.csdn.net
biXhp3Ha1fgxVEp48zHrvVoXMStmxPuAPHo3TVz5lHU=
www.csdn.net
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。