Desafío Contact
#3 Solución de Arias
Ver código
|
Ver comentarios (4)
|
Descargar código
Fecha: 27 septiembre 2005
Tamaño: 16878 caracteres
Comentarios: 4
Solución online:
http://desafios.php5.cz/contact/
Valoración









9.40
(5 votos)
"Si de verdad os poneis a sacarlo es menos dificil de lo ke parece, tened en cuenta ke trabajais con codigos ASCII y pensar en binario :P"
Valora esta solución
<?php
echo "\n- Mensaje recivido:\n", decode('$*$*$&$$$&*$$#*&*&**$&&*$#$$$&#$$&*$$&#&*&**$&*&$&$$$&&$$&#&$&$#$#*#*#&&*&****&&$$$#$&$$*&$#$#*&$&$$*&**$&*#$&*$$&#*2$&&$$&#&$&$#*&**$#&$$&##$#$$*&*$2*&#&*&**$$$#$&$$*&$#$#*&$&$$*&**$#*&$&$$$&*#$&$$$&&$$#$&$&&$$&#&$&$#*&**$&*$*&**$&#*$&##$#$**&**$&##$&$&*&**$#*#$#**$&*$$&#$*&**$&#$$&*$$&&$$&#*$#*#*&**$&$&$#*&$&##$&#$*&**$#&$$&##$#$$$#*&*&**$#**$&#*$&*$$&#&$&$$$#$**&#&*&**$$**$&#*$&$$$&*$$#*#$&$$*&**$#*#$#$*$&##$#***&**$&&$$#$**&**$*#&$*##$$$#*&*$3*&#&*&****&&$*##$#$$$#*&*&**$&&$$&#&$&*&$&##$#&**&**$&&$$#*#*&**$&$&$#$$$&#*2*&**$&##$&$&*&**$&*$$&$*$#$&$&$$$#*&$#$*$&&$$#*#$&$$$&#$$&$$$&#&$#$*$#*#*&**$&#*$&&$$&&#$&$$*#&&*&***&$#$*&*$&##$#$#*&**$#$*$&##*&**$&$$$&#&$&#*$&*$$#*&$&$#$&$$*&**$#&$$&##$#$$$#*&*&**$#**$&$$$&#&$&&$$#*#*&$#*&#**&***&$#$$$&$&&$$&*$$&$#$#*&$&*$*&$#*&**$&*$$&#&$&$**&**$#$*$&&*$&*$$#$**&**$&&#$&&$$&#&$&$**&**$&##$&$&*&**$#*#$#$*$#$$$&$&2*&#&3*&****&&$$$#$&$$*&**$&$*$&##$&#&*&$#$#$**&**$&&#$&#&$&##$#$#*&**$#$#$&&*$&*$$#$**&**$&*$*&**$#**$&$$$&#&$&&$$#*#*&**$&&$$#*#*&**$&#&$&##$#*&*&**$#$#$&*$$&#&$#$**&**$#$*$&##*&**$&$$$&#&$&#*$&*$$#*&$&$#$&$$*&**$&&$$#$**&#&*&**$$*#$&##*&#**&**$#**$&#*$&$$$&*$$#*#$&$$*&#&3*&**$&$*$&##$&#&*&$#$#$**&**$&*&$&##$#$*$&&*$&$$$#*&*&**$#$$$#*#*&#&**&&$$$*$&&*$&*$$&#&$&&#$#*#*&#**&**$&*$$&#&$&$**&**$&*#$&##$&#&$&$#$#*&$&*$$#$*$#$$$&#*$&*$$#$*$&&$$&##$&#&$#*#*&**$&$&$&##$#*&*&**$&$*$&$$$&*#$&##$&$*$&&$$&#&$&$#*&**$#$*$&&*$&$$*&**$&#$$&$$$#*#2$&*$$&$#$&$$*&#&*&**$$**$*&*$$***&#**&**$&&$$#*#$&#&*&$#$#$**&**$&&$$#$**###*#&**#$$*#*$$&*#*#*$*#&$$&*#*#$$*#$**#*&*#$$*#$&*#***#$#*#&$$&*&*#$*2*#***#$&*#*$$&$$$&*&*#*#*#*$*#$&2$&$&*#&**#&$*#$$*#**');
$respuesta = encode('Y... por que no configurais un filtro para los emails?', array('(', ')', '_', '|'));
//email('extr@terestr.es', 'Re: Dear human beings', $respuesta);
echo "\n\n- Mensaje enviado a los alienigenas:\n", $respuesta, "\n\n- Mensaje enviado decodificado:\n", decode($respuesta, array('(', ')', '_', '|'));
function decode($cadena, $encoding = array('*', '$', '&', '#')) {
if (!checkEncoding($encoding)) return false;
$regexp = preg_replace("/([\\[\\]\\^\\-\\\\])/", "\\\\\\1", implode($encoding));
if (!preg_match("/^(?:[".$regexp."]{4}(?:[1-9][0-9]+|[2-9])*)*$/", $cadena)) return false;
$encoding = array_flip($encoding);
preg_match_all("/([".$regexp."]{4})([1-9][0-9]+|[2-9])?/", $cadena, $letras);
ob_start();
for ($i=0; $i<count($letras[0]); $i++) {
$letra = $letras[1][$i];
$ascii = $encoding[$letra{0}]*64 + $encoding[$letra{1}]*16 + $encoding[$letra{2}]*4 + $encoding[$letra{3}];
echo str_repeat(chr($ascii), empty($letras[2][$i]) ? 1: $letras[2][$i]);
}
$decode = ob_get_contents();
ob_end_clean();
if (strlen($decode) < 32) return false;
$str = substr($decode, 0, -32);
return md5($str) == substr($decode, -32) ? $str : false;
}
function encode($cadena, $encoding = array('*', '$', '&', '#')) {
if (!checkEncoding($encoding)) return false;
$cadena .= md5($cadena);
preg_match_all("/((.)\\2*)/s", $cadena, $letras);
$letras = $letras[1];
ob_start();
for ($i=0; $i<count($letras); $i++) {
$ascii = ord($letras[$i]{0});
echo $encoding[($ascii & 192) >> 6], $encoding[($ascii & 48) >> 4], $encoding[($ascii & 12) >> 2], $encoding[($ascii & 3)];
if (($len = strlen($letras[$i])) > 1) echo $len;
}
$encode = ob_get_contents();
ob_end_clean();
return $encode;
}
function checkEncoding($encoding) {
if (!is_array($encoding) || count($encoding) != 4 || array_unique($encoding) != array_values($encoding)) return false;
for ($i=0; $i<4; $i++)
if (!ctype_print($encoding[$i]) || ctype_digit($encoding[$i]))
return false;
return true;
}
?>