• Home
  • Java
  • Encriptar información con Java
5.0 / 5

Encriptar información con Java

7.707K
5

Hola señores, en este segundo articulo sobre encriptación vamos a ver otro ejemplo, ahora un poco mas complicado para que si alguien llegue a obtener esos datos, les sea difícil de descifrar.

Para empezar en nuestro archivo pom.xml, vamos a agregar la siguiente dependencia de Apache Commons Codec 1.10 (más información aqui).

Con esta libreria podemos encriptar y desencriptar usando MD5, SHA, RSA y AES.

Código de Ejemplo

pom.xml

<dependency>
   <groupId>commons-codec</groupId>
   <artifactId>commons-codec</artifactId>
   <version>1.10</version>
</dependency>

Clase Ejemplo

Luego creamos una clase util, que nos va a servir mucho para no duplicar código.

package ar.com.juanlopez;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import static org.apache.commons.codec.binary.Base64.decodeBase64;
import static org.apache.commons.codec.binary.Base64.encodeBase64;

/**
 * @author jlopez
 */
public class EncryptUtil {
    // Definición del tipo de algoritmo a utilizar (AES, DES, RSA)
    private final static String alg = "AES";
    // Definición del modo de cifrado a utilizar
    private final static String cI = "AES/CBC/PKCS5Padding";

    /**
     * Función de tipo String que recibe una llave (key), un vector de inicialización (iv)
     * y el texto que se desea cifrar
     * @param key la llave en tipo String a utilizar
     * @param iv el vector de inicialización a utilizar
     * @param cleartext el texto sin cifrar a encriptar
     * @return el texto cifrado en modo String
     * @throws Exception puede devolver excepciones de los siguientes tipos: NoSuchAlgorithmException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException
     */
    public static String encrypt(String key, String iv, String cleartext) throws Exception {
        Cipher cipher = Cipher.getInstance(cI);
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), alg);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);
        byte[] encrypted = cipher.doFinal(cleartext.getBytes());
        return new String(encodeBase64(encrypted));
    }

    /**
     * Función de tipo String que recibe una llave (key), un vector de inicialización (iv)
     * y el texto que se desea descifrar
     * @param key la llave en tipo String a utilizar
     * @param iv el vector de inicialización a utilizar
     * @param encrypted el texto cifrado en modo String
     * @return el texto desencriptado en modo String
     * @throws Exception puede devolver excepciones de los siguientes tipos: NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException
     */
    public static String decrypt(String key, String iv, String encrypted) throws Exception {
        Cipher cipher = Cipher.getInstance(cI);
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), alg);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
        byte[] enc = decodeBase64(encrypted);
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivParameterSpec);
        byte[] decrypted = cipher.doFinal(enc);
        return new String(decrypted);
    }
}

Manos a la obra…

Bueno ya tenemos lo importante para poder encriptar cualquier información, como verán se encripta solamente String.

Para probar nuestro Util podemos hacer lo siguiente:

package ar.com.juanlopez;
 
/**
 * @author Julio Chinchilla
 */
public class Main {
 
    public static void main(String[] args) throws Exception {
    String key = "6AS5D4C5R5D5E6D6"; //KEY
    String iv = "0123456789ABCDEF"; // vector de inicialización usado en iv
    String cleartext = "JLopez";
    System.out.println("Encriptado: "+EncryptUtil.encrypt(key, iv, cleartext));
    System.out.println("Desencriptado: "+EncryptUtil.decrypt(key, iv, cleartext));
 }
 
}

y en la salida tendremos lo siguiente:

Encriptado: EtOsozq+gHO/yFPNA39fYw==
Desencriptado: JLopez

Bueno espero les guste el artículo, espero sus comentarios.

THIS IS AN OPTIONAL

Related Post

Actualmente en la documentación oficial de Angular hay 12 páginas largas para explicar cómo func

Buenas Días/Tardes/Noches gente, el día de hoy salio la nueva release de jhipster, la 4.6.1. &n

Hola a todos, como están? bueno les comento que hoy se actualizo a 4.2.0, y trae un cambio grande.

LEAVE YOUR COMMENTS