AES 256 en Java

Sheeraz Gul 12 octubre 2023
  1. AES 256 en Java
  2. Utilice AES 256 para cifrar datos en Java
  3. Use AES 256 para descifrar datos en Java
AES 256 en Java

El AES 256 es un algoritmo de cifrado y descifrado. Este tutorial demuestra cómo implementar AES 256 en Java para cifrar y descifrar los datos.

AES 256 en Java

El AES es un algoritmo de cifrado simétrico que es fácil de implementar en software, hardware y entornos restringidos. También proporciona una buena defensa contra varios ataques.

El AES puede manejar bloques de 128 bits en forma de cifrado de bloque utilizando claves de tamaños de 128, 192 y 256 bits. Cada cifrado descifrará o cifrará datos en bloques de 128 bits.

El AES utiliza el mismo proceso de cifrado y descifrado en el que el receptor y el remitente deben usar y conocer las mismas claves secretas. Este tutorial demuestra cómo cifrar y descifrar datos utilizando AES 256.

Utilice AES 256 para cifrar datos en Java

El siguiente código Java implementa el cifrado AES 256.

package delftstack;

import java.nio.charset.StandardCharsets;
import java.security.spec.KeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AES_Encrypt {
  private static final String SECRET_KEY = "Delftstack";
  private static final String SALT = "Tutorial";

  public static String encrypt_AES(String StringToEncrypt) {
    try {
      byte[] a = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      IvParameterSpec Iv_Specifications = new IvParameterSpec(a);

      SecretKeyFactory Secret_Key_Factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
      KeySpec Key_Spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);
      SecretKey Temp_Secret_Key = Secret_Key_Factory.generateSecret(Key_Spec);
      SecretKeySpec Secret_Key = new SecretKeySpec(Temp_Secret_Key.getEncoded(), "AES");

      Cipher AES_Cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      AES_Cipher.init(Cipher.ENCRYPT_MODE, Secret_Key, Iv_Specifications);
      return Base64.getEncoder().encodeToString(
          AES_Cipher.doFinal(StringToEncrypt.getBytes(StandardCharsets.UTF_8)));
    } catch (Exception e) {
      System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
  }

  public static void main(String[] args) {
    String Original_String = "www.delftstack.com";

    String Encrypted_String = AES_Encrypt.encrypt_AES(Original_String);

    System.out.println(Original_String);
    System.out.println(Encrypted_String);
  }
}

La salida para el código anterior es:

www.delftstack.com
fV2B4Is2xva8C+SieUg01vRbGmZNbyTzV9+llBdv7kM=

Use AES 256 para descifrar datos en Java

El siguiente código demuestra el descifrado AES 256 en Java.

package delftstack;

import java.nio.charset.StandardCharsets;
import java.security.spec.KeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AES_Decrypt {
  private static final String SECRET_KEY = "Delftstack";
  private static final String SALT = "Tutorial";

  public static String decrypt_AES(String strToDecrypt) {
    try {
      byte[] a = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      IvParameterSpec IV_Specifications = new IvParameterSpec(a);

      SecretKeyFactory Secret_Key_Factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
      KeySpec Key_Spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);
      SecretKey Temp_Secret_Key = Secret_Key_Factory.generateSecret(Key_Spec);
      SecretKeySpec Secret_Key = new SecretKeySpec(Temp_Secret_Key.getEncoded(), "AES");

      Cipher AES_Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
      AES_Cipher.init(Cipher.DECRYPT_MODE, Secret_Key, IV_Specifications);
      return new String(AES_Cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } catch (Exception e) {
      System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
  }
  public static void main(String[] args) {
    String Encrypted_String = "fV2B4Is2xva8C+SieUg01vRbGmZNbyTzV9+llBdv7kM=";

    String Decrypted_String = AES_Decrypt.decrypt_AES(Encrypted_String);

    System.out.println(Encrypted_String);
    System.out.println(Decrypted_String);
  }
}

El código anterior descifrará una cadena cifrada utilizando AES 256. Ver salida:

fV2B4Is2xva8C+SieUg01vRbGmZNbyTzV9+llBdv7kM=
www.delftstack.com
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java Encryption