jueves, 1 de octubre de 2015

Encriptar un texto en lenguaje JAVA y desencriptarlo en PHP (Codificación AES) - < PHP 7.1.0

ACLARACIÓN: Esta función solo puede ser utilizada hasta PHP 7.1.0, ya que ha sido declarada como obsoleta para posteriores versiones.

Código para encriptar un texto en lenguaje JAVA y desencriptarlo en PHP. Codificación AES.
El parámetro "key" es la llave para encriptar/desencriptar y debe ser la misma en ambos lados del código

Método de encriptación JAVA
public static String encrypt(String input, String key){
   byte[] crypted = null;
   try{
     SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
       cipher.init(Cipher.ENCRYPT_MODE, skey);
       crypted = cipher.doFinal(input.getBytes());
     }catch(Exception e){
      System.out.println(e.toString());
     }
     return new String(Base64.encodeBase64(crypted));
 }
 

Método de desencriptación PHP
public static function decrypt($sStr, $sKey) {
  $decrypted= mcrypt_decrypt(
   MCRYPT_RIJNDAEL_128,
   $sKey, 
   base64_decode($sStr), 
   MCRYPT_MODE_ECB
  );
  $dec_s = strlen($decrypted); 
  $padding = ord($decrypted[$dec_s-1]); 
  $decrypted = substr($decrypted, 0, -$padding);
  return $decrypted;
 }

Código original de stevenholder. Más información y código completo en (Github)stevenholder/PHP-Java-AES-Encrypt

4 comentarios:

  1. Excelente, gracias por compartir!!!, para todos los que les marque error, solo usen un key de 16 bytes:
    encrypt("cadena", "qwdsdrtyfdesxcfr")

    ResponderEliminar
    Respuestas
    1. Gracias por la aclaración!
      Que bueno que te haya servido. Saludos :D

      Eliminar
  2. Lamentablemente en la referencia a mcrypt_decrypt dice "Esta función ha sido declarada OBSOLETA a partir de PHP 7.1.0 y será ELIMINADA a partir de PHP 7.2.0. Su uso está totalmente desaconsejado."
    Si encuentro el reemplazo les comento por aquí.

    ResponderEliminar
    Respuestas
    1. Muchas gracias! Lo dejaré indicado en el nombre de la entrada, para que sea más clara la información.

      Eliminar