CRC32는 특정 데이터의 오류가 발생했는지를 확인하기위한 방법이다.
32비트 결과물이므로, 32비트보다 큰 데이터의 경우, 중복가능성이 존재한다.
64비트데이터인 경우, 32비트데이터 길이만큼 중복 가능성이 존재한다.
엄청난 문제이다. 그러나, 실제로 사용되는 데이터는 2^64 의 모든 경우를 사용하는 경우는 드물다.
그러므로 실제 오류가능성으 크게 낮아진다.
그러나, 중복가능성은 여전히 존재한다.
MD5같은 방식을 추천하기도 하지만, MD5도 중복 가능성은 존재한다.
가장 확실한 방법은 데이터를 1:1로 비교하는 방법이지만, 너무 부담스럽다.
다른 방법으로는 데이터를 n등분하여, 각 구역별로 CRC32를 계산하는 방법이 있을 수 있다.
그러나, 이역시, 완전한 대책은 되지 않는다.
또다른 방법으로는 CRC32+체크섬+가중치 체크섬+...등, 동일한 데이터를 여러가지 방식으로 표시한다.
CRC32도 같아야 하고, 체크섬도 같아야하고, ...
PC에서는 CRC32보다는 체크섬방식이 효율적이다.
CRC32는 하드웨어 구현할때 효과적인 방법이다.
(CRC32는 PC에서 계산할때, 시간이 많이 걸린다.)
왜 PC에는 CRC32계산하는 하드웨어가 없나???
데이터 중복이 문제가 될 소지가 있는 경우에는, CRC32가 같을 경우에도, 1:1로 완전한 비교가 필요하다.
물론, CRC32가 다른 경우에는 1:1비교는 불필요하다.
데이터의 크기가 상당히 큰 경우에는 1:1비교하는데 시간이 많이 걸리는 문제가 있다.
len, CRC32는 같은데, 데이터가 다른 경우, 처리방안
모든 CRC32를 사용하지 않으므로, CRC32+1에 저장하면 될듯 하다.
그러나, 이 역시 불안하다.
CRC32파일명으로 [LEN][DATA][LEN[DATA]...방식으로 저장하는것이 좋을듯 하다.
단, 데이터의 크기가 매우 크지 않을 경우에만