Pregunta

Tengo una cadena binaria (que se muestra en hexax) y estoy usando CRC-16-CCITT.Quiero que todos mis CRC salgan a un valor establecido, 0x1d0f.Sé que es posible hacer que los CRC coincidan con este valor agregando a 2 bytes hasta el final del mensaje original, pero no estoy seguro de cómo averiguar cuál debe ser el valor adjunto.

ex.

0x01 0000 0000 0000 0000 0000 0000 0000 0000 13d8

El valor agregado es el 0x13d8

Al agregar este 13D8 al mensaje, el CRC me da el 0x1D0F deseado.

Cualquier ayuda sobre cómo calcular este valor 0x13D8 sería apreciado enormemente.

Si se puede hacer perfectamente en el código, sea un bono!

¿Fue útil?

Solución

La teoría es bastante simple, pero, por supuesto, se necesita un cuidado de implementar correctamente.

Puede elegir cualquiera de los 16 bits en cualquier parte del mensaje (incluidos dos bytes al final o 16 bits individuales dispersos donde quiera) para no estar definido. Llámalos xi para i= 0..15 . Luego, use un algoritmo CRC bit-by-bit para procesar el mensaje, pero generar y actualizar los coeficientes de 16 ecuaciones lineales en xi , que representan los 16 bits del CRC.

Luego, tiene una ecuación de matriz simple AX + B= C . Las operaciones para AX + B= C no son la multiplicación y la adición habituales, sino más bien las operaciones exclusivas de ida y y . < / p>

Ahora utiliza los métodos habituales para invertir la matriz a , que es realmente más fácil con y y xor (adición y resta son ahora Tanto lo mismo, simplemente exclusivo, o), cómputo B ^ C y multiplique eso por la inversa. Ahora tiene los valores para poner en los bits xi para obtener el CRC deseado.

Una simplificación adicional es que no necesita el mensaje real, solo la longitud y la ubicación del xi , y luego haga lo anterior con todos los otros bits del mensaje establecido en cero . Esto se debe a que si tiene dos mensajes P y q de la misma longitud, luego crc (p) ^ crc (q)= crc (p ^ Q) . (Esto se aplica al algoritmo de CRC central, ignorando la pre y el posprocesamiento del CRC.)

Actualización:

Puede descargar spoof.c , que resuelve el problema de modificar un mensaje para producir un CRC en particular .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top