Hace un tiempo por alla en el 2010 hacia para jugar un poco un método de encriptación simple llamado "EasyCry", escrito originalmente en PHP.
http://www.kriptopolis.org/node/7717
Al final nadie se prendió a romperlo, ahora lo encontré por ahí tirado y decidí subirlo a Github, y como lo encontré después de tiempo me decidi a mejorarlo.
El algoritmo lo que hace es:
Es simetrico, osea se utiliza la misma clave para encriptar/desencriptar, la clave puede ser una frase o un contenido binario, ya que lo que uso realmente es un hash de la clave (en algunas partes utilizo la clave en limpio para generar otros hashes).
Primero que nada si está habilitado comprimo el contenido a enciptar, esto lo hago para ahorrar espacio pero tambien puede servir para hacer el criptoanálisis un poco mas dificil, luego creo una metadata con la hora, el tamaño del contenido a encriptar, un checksum y un pequeño checksum de la hora + el tamaño + la clave.
Ahora viene lo divertido, mi metodo se basa en separar la información en bloques, por defecto de 8 bytes, pero se puede configurar, esos bloques de 8 bytes son desordenados tomando como semilla del "desorden" 4 bytes del hash en hexadecimal del hash de la password sumada a otro hash generado con la clave y el checksum de la informacion.
Luego a cada byte de ese bloque desordenado, le hacia un caesar usando el primer byte binario de dicho hash generado algo asi como
enc_byte = byte + (num del 0 al 255) % 255;
Pero ahora hago otra cosa:
enc_byte = (byte + (hash_byte/3)^2 + hash_byte) % 255;
Recuerden que hash_byte va cambiando por cada byte, ahora que pasa cuando se terminan los 128 bytes binarios del hash? se genera otro hash suamdno la clave, el checksum del contenido y el hash anterior y se repite todo de nuevo.
Como esto es en bloques, por ejemplo de a 8, puede que sobren bytes al final del archivo, estos se rrellenan con basura (total el tamaño verdadero lo tengo en la metadata).
Por ultimo devuelvo el cheksum generado con la clave y el contenido de la información + un byte que dice la cantidad de bloques (pasado por el incrementador para que se necesite la clave para saberlo) y la metadata+data+basura encriptadas.
Al final si esta seteado tambien la encodeo en base64 para que no sea tan fea.
En fin, el codigo fuente lo encuentran aca: https://github.com/exos/PHP-EasyCry
Y aca les dejo un lindo mensaje encriptado a ver si lo pueden romper:
RPLyspU8NcF/K6aEUSFnBjBXiYOod35guolgv1OHjYVUWmGfjF3AhauMdoma XFyAV1lkillZpo2Ohl1+q1yPW4thdlRZW417XFq+fniBh1emhXeJdId7e3eo kKlgX4inh6mJrKeGjlqGWneIrId7jKh3e45hq6t5YFSQWKZaVVqNWIliYFZd i152W4mJh12ri/Q3AZanp1d4NiTFu+U5RENU4pSXzDiWWe5LTFJ0thaXrNxh JKhlF6pT3RtpJ1Pr8cjXWnWcmI4dHHzMAWzPp4xXHsAxF8lVyUWNpIksmF64 swy0oWrEpsQ/PQe/6Bpmsd9e8eNH7WnXSAo55LH3nmnuLRyfs7SjltBBumFC plCOUYwXdsGgjsVxiImeyXGUQReasIPKyLm+Dqwze9ziVyKAOZylk884dpme C0xzONXu1/Rok8OlthBERn6u9VVwQpmIX3+oj3+g4a6VdXLq7pbCQGQOGByE S7gSyQCSM7vGTuoCXBuwtYy9wDjwIxksk5kXZhWzN4aeAnCrUS0QlcTRkfHl MfHIrFzvjXR1WXWL
Saludos!
ATENCION!!!!
Exos1 Marzo 2012 - 1:05am
He descubierto un error grabe a la hora de recorrer el hash para hacer el pseudo caesar modificado, asi que subi una nueva versión, la beta-2.0-1 que arregla esto, lo malo es que el mensaje anterior esta encriptado para la beta-2.0, en la ultima version no sirve mas, y en la version que esta es mas debil.
El mensaje a romper no es el posteado antes sino este:
Perdon por este ultimo cambio, pero es bastante relevante, si ven en la pagina de tags de Github veran la version beta-2.0 que es la "mala" y la beta-2.0-1 que es la reparada:
https://github.com/exos/PHP-EasyCry/tags
Saludos y disculpas.