CRC 是根据文件添加到归档时的内容计算出的一个短数字。它就像指纹,这样以后就能检查文件是否与写入归档时完全一致。CRC 是“循环冗余校验”(cyclic redundancy check)的缩写。
它的来源以及哪些文件包含它
归档文件会包含它。这意味着 ZIP 文件以及基于 ZIP 的许多格式都会包含它,比如 .docx、.xlsx、.epub、.jar 和 .apk,而 RAR、7z 和其他格式则使用各自的校验和。报告中可能不会为 .epub 文件列出它,即使文件内部实际存储了这个值。
压缩程序根据文件原始、未压缩的内容计算出这个值,并将其与该条目一同存储,因此归档中的每个成员都有自己的 CRC。你不能自己选择或输入它,它也不是关于你或你的电脑的信息。它完全是从文件的字节内容推导出来的。
存储 CRC 的目的,是为了之后进行对比。解压归档时,程序会再次根据刚解出的内容计算 CRC,并将两者进行比较。如果不一致,你就会在 WinZip、7-Zip 或 unzip 中看到常见的 CRC 错误提示,这表示解压出来的文件与最初加入归档的文件不匹配。这说明在某个环节发生了损坏:下载中断、磁盘故障、复制不完整等。只要有一个成员损坏,就足以触发该提示,即使归档中的其他内容都正常。
该数值的格式
ZIP 使用一种名为 CRC-32 的变体,生成一个 32 位数字。它通常以 8 位十六进制数字显示,例如 0x8f3d2b1c,有些程序则会把同一个值显示为一长串十进制数字。这个值没有单位,也没有高低好坏之分。一个空文件或不包含任何数据的文件夹条目会显示为 0x00000000。
它的重要性
CRC 是一个完整性字段,是归档文件用来证明内容在存储和传输过程中保持完好的内置凭证。在元数据报告中看到 CRC,并不表示你的归档有问题。它只是创建归档时记录下来的数值;真正的校验发生在你解压文件时,而不是在你查看报告时。
CRC 还有一个实用的副作用:相同的内容总会产生相同的 CRC,因此两个 CRC 相同且大小相同的条目几乎可以确定是同一个文件,这让在大型归档中快速发现重复内容变得更加方便。
CRC 不是安全功能。CRC 是为检测偶然损坏而设计的,并且位数较短,可以刻意构造出相同的 CRC,因此 CRC 校验通过并不能证明文件从未被人修改。用于安全目的的是 SHA-256 等加密哈希算法。由于 CRC 值是从内容推导出来的,它也可以用来判断两个不同的归档中是否包含同一个文件,这有时很有用,也值得在你打算把归档交给别人之前记住这一点。