Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.frame.Conf; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import static org.apache.commons.codec.binary.Base64.decodeBase64; import static org.apache.commons.codec.binary.Base64.encodeBase64; /** * * @author Erick */ public class Utilidades { /** * Constructor de la clase Utilidades */ private final static String alg = "AES"; // Definicin del modo de cifrado a utilizar private final static String cI = "AES/CBC/PKCS5Padding"; public Utilidades() { } /** * * @param keypass Es la llave plublica para enctriptar el texto * @param texto Texto a encriptar * @return retorna el hash del texto encriptado * @throws Exception */ public String Encriptar(String keypass, String texto) throws Exception { String secretKey = keypass; //llave para encriptar datos String base64EncryptedString = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] digestOfPassword = md.digest(secretKey.getBytes("utf-8")); byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); SecretKey key = new SecretKeySpec(keyBytes, "DESede"); Cipher cipher = Cipher.getInstance("DESede"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] plainTextBytes = texto.getBytes("utf-8"); byte[] buf = cipher.doFinal(plainTextBytes); byte[] base64Bytes = Base64.encodeBase64(buf); base64EncryptedString = new String(base64Bytes); } catch (NoSuchAlgorithmException | UnsupportedEncodingException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex) { throw new Exception(ex.getMessage()); } return base64EncryptedString; } /** * * @param keypass Es la llave plublica para desencriptar el texto * @param textoEncriptado hash del texto a desencriptar * @return retorna el texto desencriptado * @throws Exception */ public String Desencriptar(String keypass, String textoEncriptado) throws Exception { String secretKey = keypass; //llave para encriptar datos String base64EncryptedString = ""; try { System.out.println("checkpoint"); byte[] message = Base64.decodeBase64(textoEncriptado.getBytes("utf-8")); MessageDigest md = MessageDigest.getInstance("MD5"); System.out.println("checkpoint2"); byte[] digestOfPassword = md.digest(secretKey.getBytes("utf-8")); byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); System.out.println("checkpoint3"); SecretKey key = new SecretKeySpec(keyBytes, "DESede"); System.out.println("checkpoint4"); Cipher decipher = Cipher.getInstance("DESede"); decipher.init(Cipher.DECRYPT_MODE, key); System.out.println("checkpoint5"); byte[] plainText = decipher.doFinal(message); System.out.println("checkpoint6"); base64EncryptedString = new String(plainText, "UTF-8"); } catch (UnsupportedEncodingException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex) { throw new Exception(ex.getMessage()); } return base64EncryptedString; } public String Desencriptar2(String keypass, String textoEncriptado) throws Exception { String secretKey = keypass; //llave para encriptar datos String base64EncryptedString = ""; try { System.out.println("checkpoint"); byte[] message = Base64.decodeBase64(textoEncriptado.getBytes("utf-8")); MessageDigest md = MessageDigest.getInstance("MD5"); System.out.println("checkpoint2"); byte[] digestOfPassword = md.digest(secretKey.getBytes("utf-8")); byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); System.out.println("checkpoint3"); SecretKey key = new SecretKeySpec(keyBytes, "DESede"); System.out.println("checkpoint4"); Cipher decipher = Cipher.getInstance("DESede"); decipher.init(Cipher.DECRYPT_MODE, key); System.out.println("checkpoint5"); byte[] plainText = decipher.doFinal(message); System.out.println("checkpoint6"); base64EncryptedString = new String(plainText, "UTF-8"); } catch (UnsupportedEncodingException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex) { throw new Exception(ex.getMessage()); } return base64EncryptedString; } 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)); } /** * Funcin de tipo String que recibe una llave (key), un vector de inicializacin (iv) * y el texto que se desea descifrar * @param key la llave en tipo String a utilizar * @param iv el vector de inicializacin 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); } }