1. 程式人生 > 程式設計 >Java AES256加密解密示例程式碼

Java AES256加密解密示例程式碼

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。