Estoy tratando de implementar un ataque Meet-in-the-Middle y solo para probarlo, he hecho algunos códigos de valores, que son simplemente este bloque de código simple:
byte[] key1 = new byte[] { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] key2 = new byte[] { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
string p1 = "Hello Dear World";
string p2 = "Hello Evil World";
//SimpleDES is just a C# implementation of DES that I've wrapped in its own class
SimpleDES des1 = new SimpleDES(key1);
SimpleDES des2 = new SimpleDES(key2);
byte[] toEncrypt1 = Encoding.ASCII.GetBytes(p1);
c1 = Convert.ToBase64String(des2.Encrypt(des1.Encrypt(toEncrypt1)));
byte[] toEncrypt2 = Encoding.ASCII.GetBytes(p2);
c2 = Convert.ToBase64String(des2.Encrypt(des1.Encrypt(toEncrypt2)));
Dejaré de lado cualquier otro código, a menos que lo solicite alguno de ustedes.
El problema es que, dadas las sencillas claves de prueba y los textos de prueba anteriores, obtengo varios pares de claves diferentes que, cuando se cifran con clave1 y luego clave2, producen el mismo texto cifrado.
Hay algo obvio, por lo que he dicho hasta ahora, lo cual lo explica, o necesito mirar más de cerca mi código de fuerza bruta.
¿Se debe a la tecla corta que estoy usando?