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:

  1. RPLyspU8NcF/K6aEUSFnBjBXiYOod35guolgv1OHjYVUWmGfjF3AhauMdoma
  2. XFyAV1lkillZpo2Ohl1+q1yPW4thdlRZW417XFq+fniBh1emhXeJdId7e3eo
  3. kKlgX4inh6mJrKeGjlqGWneIrId7jKh3e45hq6t5YFSQWKZaVVqNWIliYFZd
  4. i152W4mJh12ri/Q3AZanp1d4NiTFu+U5RENU4pSXzDiWWe5LTFJ0thaXrNxh
  5. JKhlF6pT3RtpJ1Pr8cjXWnWcmI4dHHzMAWzPp4xXHsAxF8lVyUWNpIksmF64
  6. swy0oWrEpsQ/PQe/6Bpmsd9e8eNH7WnXSAo55LH3nmnuLRyfs7SjltBBumFC
  7. plCOUYwXdsGgjsVxiImeyXGUQReasIPKyLm+Dqwze9ziVyKAOZylk884dpme
  8. C0xzONXu1/Rok8OlthBERn6u9VVwQpmIX3+oj3+g4a6VdXLq7pbCQGQOGByE
  9. S7gSyQCSM7vGTuoCXBuwtYy9wDjwIxksk5kXZhWzN4aeAnCrUS0QlcTRkfHl
  10. MfHIrFzvjXR1WXWL

Saludos!