Posts Tagged ‘PHP’

16 03
02
2013

Encriptar y desencriptar en PHP

Domingo, febrero 3rd, 2013

Hoy vamos a implementar una manera sencilla de encriptar y desencriptar cadenas de texto en PHP.

Seguramente ya conocerás que existen diferentes tipos de encriptación, que podríamos englobar en 2 grandes grupos.

  • Encriptación en 2 sentidos o reversible o simétrica: es decir, permite encriptar y desencriptar un texto. Ejemplos de este tipo de encriptación para PHP son base64 (base64_encode y base64_decode) o mcrypt.
  • Encriptación en 1 único sentido o irreversibles o asimétrica: esto es, no se permite la desencriptación del texto encriptado previamente. Dado que recuperar la cadena original se hace imposible, esto hace que la encriptación asimétrica sea más segura que la encriptación simétrica o en 1 único sentido. Ejemplos de funciones PHP de este tipo de encriptación son md5, sha1, crypt, crc32.

A partir de estas herramientras que PHP nos proporciona para realizar labores de encriptación y desencriptación, vamos a construir nuestra clase Encrypter con 2 sencillos métodos:

  • encrypt: nos permitirá encriptar un texto
  • decrypt: permitirá desencriptar un texto previamente encriptado mediante la misma clase Encrypter.

Esta clase Encrypter, con el objetivo de fortalecer la seguridad de la encriptación, se apoyará además en una clave secreta definida de forma interna en el atributo $key.

Por lo tanto, sobra decir que, toda desencriptación que queramos realizar de un texto, deberá realizarse bajo la misma clave secreta que haya sido utilizada en el proceso de encriptación.


/**
* Description of Encrypter
*
* @author jose
*/
class Encrypter {

	private static $Key = "dublin";

	public static function encrypt ($input) {
		$output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(Encrypter::$Key), $input, MCRYPT_MODE_CBC, md5(md5(Encrypter::$Key))));
		return $output;
	}

	public static function decrypt ($input) {
		$output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(Encrypter::$Key), base64_decode($input), MCRYPT_MODE_CBC, md5(md5(Encrypter::$Key))), "\0");
		return $output;
	}

}

El uso de la clase Encrypter es más que sencillo, en la primera línea del siguiente código encriptaremos la variable $texto que contiene el string “son unos corruptos”. En la siguiente línea, desencriptamos la variable $texto_encriptado previamente encriptado.

El resultado de la desencriptación guardado en la variable $texto_original, deberá ser igual que el de la variable inicial $texto.


$texto = "Son unos corruptos";

// Encriptamos el texto
$texto_encriptado = Encrypter::encrypt($texto);

// Desencriptamos el texto
$texto_original = Encrypter::decrypt($texto_encriptado);

if ($texto == $texto_original) echo 'Encriptación / Desencriptación realizada correctamente.';

0 27
11
2011

No encontrado en Custom Post Type

Domingo, noviembre 27th, 2011

Toda una tarde de domingo perdida, creando tipos de post customizados en wordpress, y encontrándome un bonito error 404 no encontrado o not found cada vez que quería acceder a un post determinado, o a la página general de la categoría.

Este es uno de mis custom post types que había generado, y que al intentar acceder a los post generados bajo esta categoría, me encontraba con el mensaje No encontrado.


	register_post_type( 'story',
		array(
			'labels' => array(
				'name' => __( 'Stories' ),
				'singular_name' => __( 'Story' )
			),
                        'public' => true,
                        'publicly_queryable' => true,
                        'show_ui' => true,
                        'query_var' => true,
			'has_archive' => true,
			'rewrite' => array('slug' => 'stories'),
                        'menu_position' => 5,
                        'supports' => array (
                            'title', 'editor', 'thumbnail',
                        ),
                        'capability_type' => 'post',
                        'publicly_queryable' => true,
                        'taxonomies' => array('category', 'post_tag')
		)
	);

Pues bien, después de pensar durante horas que existía algún fallo en el código, después de probar con diferentes plugins de wordpress, me da por buscar el problema Not found utilizando los custom post types, y gracias a que siempre existe alguien capaz de compartir sus experiencias en esto de la programación, encontramos la solución:


flush_rewrite_rules( false );

Añade la opción

'has_archive' => true,

a tu código register_post_type.

3 16
09
2011

Solucionando … Error Fetching http headers soap

Viernes, septiembre 16th, 2011

Si has llegado hasta aquí, seguramente ya hayas trabajado con Web Services en diferentes lenguajes de programación.
Y si has obtenido la excepcioń “Error Fetching http headers”, estarás trabajando en estos momentos con PHP.

En primer lugar comentarte que este mensaje de error tan descriptivo Error Fetching http headers se habrá producido con gran probabilidad porque ha transcurrido demasiado tiempo ejecutando la llamada al web services, o en otras palabras un poco más técnicas, porque ha expirado el tiempo máximo de espera de ejecución sobre el Web Services.

Lo que en otras plataformas como Java o .NET recibiríamos como una excepción del tipo TimeoutException, aquí lo recibimos como Error Fetching http headers soap.

¿Cómo podemos entonces indicarle a PHP que queremos incrementar el tiempo de espera?

Si tienes acceso a la configuración del servidor, basta con que busques en tu fichero php.ini la variable default_socket_timeout y definas el nuevo tiempo máximo de ejecución (en segundos) que quieras establecer.

default_socket_timeout = 6000

Si por el contrario no tienes acceso al fichero de configuración php.ini, o simplemente prefieres establecer el valor de timeout sobre el web service en tiempo de ejecución, siempre puedes definir este tipo de variables de configuración del sistema a través de la función ini_set(string $varname , string $newvalue).

ini_set('default_socket_timeout', 600);

Espero que la solución te sea de utilidad como me ha sido a mí.