He pensado mucho en este algoritmo muy simple y no tengo ni idea de si se pensó antes ... Pero creo que debería haberlo hecho.
Tampoco sé nada sobre otros algoritmos de encriptación, así que no puedo saber si esto ya fue inventado o no.
Todo está esbozado en este documento:
Y esta es una pequeña función de C # para este algoritmo.
public static void Encrypt(Stream source, Stream target, byte[] key)
{
int current;
long pos = 0;
int res;
if (source.CanSeek) source.Seek(0, SeekOrigin.Begin);
if (target.CanSeek) target.Seek(0, SeekOrigin.Begin);
while ((current = source.ReadByte()) != -1)
{
byte b = (byte)current;
res = b + key[pos++ % key.Length];
if (res > byte.MaxValue) res -= byte.MaxValue;
target.WriteByte((byte)res);
}
}
Todo lo que sé sobre el cifrado es que (i) cambia los datos de manera reversible para protegerlo.
Por lo que sé, no hay forma de descifrar la clave sin conocer los datos originales.
Y para verificar si la clave es correcta (en un intento de descifrar), se debe verificar la integridad de los datos. Por lo tanto un hash debe ser conocido ...
Entonces, ¿este algoritmo casi retardado mantendrá mis datos seguros?
Si no, ¿por qué?
Editar: ¡Intenta resolver esto!
Los bytes cifrados son 169 131 181 215 152 43 55 126 235 88 46 150 17 45 185 122 180 203 34 67 109 54 127 234 87 45 57 222 125 152 142 133
...
El hash MD5 es 116 249 25 168 168 255 211 143 122 60 216 192 37 167 178 112
!
¡Adelante!