Ecuación con xor

#1
Hola, disculpen las molestias. Estoy realizando un sistema para cifrar la comunicación entre un PIC y un PC. En el proceso de descifrado me encuentro con la siguiente operación:

a = b xor (b + c)

donde el signo '+' no es una suma lógica, sino una suma normal. Los datos conocidos son 'a' y 'c', necesito averiguar el valor de 'b', pero mis conocimientos sobre puertas lógicas son escasos. Según parece no puedo aplicar la propiedad distributiva (a = b xor b + b xor c = b xor c) pues el resultado obtenido no es el esperado.

¿Alguna sugerencia? Gracias.
 
#2
Tenés que ir sacando bit a bit, del lsb al msb. Pero la solución (b), cuando existe, no es única :cry:.
 
#4
Gracias por responder,
había pensado en realizar un algoritmo sencillo, algo como esto,

Código:
datosCifrados = reverse( reverse(datos) XOR (reverse(datos) + clave) )
donde datos y clave son variables de 2 bytes. La función reverse intercambia el byte más significativo por el menos significativo y viceversa, pero no es un buen algoritmo pues para datos diferentes obtenemos el mismo resultado.

He optado por modificarlo de la siguiente forma,

Código:
datosCifrados = reverse (reverse ( clave XOR reverse (NOT datos) ) XOR clave)
de modo que la misma función de sirve para cifrar y descifrar.
 
#5
Hola antonaca: pero sobre tu primera consulta no me explicaste el algoritmo de encriptacion.
Los metodos que comentas me recuerdan a uno muy popular, el metodo Cesar con el que veo algunas similitudes.

Por la definicion de la funcion reverse() tu metodo estaria limitado para operar sobre bytes, y la clave seria un byte, cierto ?.

Saludos
 
#6
Hacer:
datosCifrados = reverse (reverse ( clave XOR reverse (NOT datos) ) XOR clave)
Es equivalente a hacer directamente:
datosCifrados = clave2 XOR reverse (NOT datos)
donde la relacion entre clave2 y la que usabas antes es
clave2 = clave XOR reverse(clave)
 
Arriba