2014-10-17 10 views
16

Qual è la differenza tra CRC32 e CRC32C? Conosco CRC32 da molto tempo, ma ho appena sentito CRC32C oggi. Sono fondamentalmente lo stesso metodo (cioè entrambi i risultati nello stesso hash per un dato dato)?CRC32 vs CRC32C?

risposta

24

Il CRC32 trovato in zip e molti altri luoghi utilizza il polinomio 0x04C11DB7; la sua forma inversa 0xEDB88320 è forse più conosciuta, essendo spesso trovata nelle implementazioni little-endian.

CRC32C utilizza un diverso polinomio (0x1EDC6F41, invertito 0x82F63B78) ma in caso contrario il calcolo è lo stesso. I risultati sono diversi, naturalmente. Questo è anche noto come Castagnoli CRC32 e trovato in modo più evidente nelle nuove CPU Intel che possono calcolare un passo CRC completo a 32 bit in 3 cicli. Questo è il motivo per cui il CRC32C sta diventando più popolare, poiché consente implementazioni avanzate che elaborano effettivamente una parola a ciclo a 32 bit nonostante la latenza a tre cicli (elaborando 3 flussi di dati in parallelo e utilizzando l'algebra lineare per combinare i risultati)).

+3

C'è un modo per convertire tra CRC32 e CRC32C? Guardando alcune [patch del kernel con commenti] (https://lwn.net/Articles/292984/), potrebbe essere possibile ma non è spiegato. – jww

+1

@jww: Se è possibile, allora deve essere almeno complicato come unire i CRC per blocchi consecutivi insieme (come il calcolo di un 'preimage virtuale'). Non ho mai visto un algoritmo del genere, anche se la sua utilità sarebbe ovvia (come usare le istruzioni hardware per CRC32C e convertire il risultato nello standard (zip) CRC32). Il modo migliore per ottenere risposte rapidamente sarebbe quello di pubblicare questo come una domanda a sé stante. Il mio +1 è un dato. ;-) – DarthGizka

Problemi correlati