CRC-32 校验和计算器
输入文本即可算出 CRC-32 值(8 位十六进制,同时给出大写形式与十进制值)。它和 zip、gzip、PNG 内部使用的校验算法完全一致(IEEE 802.3),适合核对数据在传输、下载过程中有没有损坏。计算在浏览器本地完成,内容不上传。
CRC-32 是快速发现传输损坏的校验码:zip、gzip、PNG 内部用的都是它(IEEE 802.3 口径)。把文本粘进来即得 8 位十六进制值,同时给出大写与十进制形式——三种写法是同一个数的不同表示,比对时按对方给的格式取。
它的定位要摆正:CRC-32 不需要密钥、算得飞快,但只有 32 位,攻击者可以构造出校验值相同的另一段内容,所以它回答的是路上有没有出错,不是有没有人故意改过。防篡改要用 SHA-256 或带签名的校验。比对不一致时,先查换行符(CRLF 与 LF 是不同字节)与编码。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 把文本粘进输入框,8 位十六进制校验值即时生成。
- 按对方格式取值比对:小写 / 大写十六进制或十进制。
- 对不上时查三处:内容范围、换行符(CRLF/LF)、编码(UTF-8)。
- 判断是否被篡改请改用 SHA-256,CRC-32 只管损坏。
计算原理与示例
基本用法
把内容粘进输入框,结果即时更新:主结果是 8 位小写十六进制,下面两行分别给出大写形式与十进制值。三种写法都是同一个数的不同表示,比对时用哪种取决于对方给你的格式。
CRC-32 到底在算什么
CRC-32 把整段数据当成一个长二进制多项式做除法,取余数作为校验码:数据里只要有一个 bit 变了,余数几乎必然改变。它不需要密钥、算得飞快,所以被用在 zip、gzip、PNG 这类需要「快速发现传输损坏」的格式里。
它不能证明什么
它挡不住有意篡改:攻击者可以刻意构造另一段内容,让 CRC-32 与原文完全相同(碰撞),所以不能用来证明文件「没被人动过」。要防篡改需要 SHA-256 这类抗碰撞的摘要,或者带签名的校验方式。
口径:IEEE 802.3(zlib / zip / gzip / PNG 同款)CRC-32,反射式多项式 0xEDB88320,初值与结果异或均为 0xFFFFFFFF;输入按 UTF-8 编码后逐字节计算,输出 8 位小写十六进制。
代码示例
Python 标准库 zlib
import zlib
zlib.crc32(b"hello") # 907060870
format(zlib.crc32(b"hello"), "08x") # "3610a686"
# 与 zip / gzip / PNG 同口径(IEEE 802.3)
JavaScript Node 20+ 内置
const { crc32 } = require("node:zlib");
crc32(Buffer.from("hello")).toString(16).padStart(8, "0");
// "3610a686"
// 旧版 Node 可用第三方 crc 库,或直接用 zip 工具反查
常见问题
CRC32 和 MD5 校验有什么区别?
CRC32 只有 32 位(8 位十六进制),算得极快,设计目标是发现传输噪声造成的随机错误;MD5 是 128 位,抗碰撞能力比 CRC32 强得多(但已被证明可构造碰撞)。日常「下载有没有损坏」用 CRC32;「内容是否被替换」用 SHA-256。
同一个文件在本地算出的 CRC32 和这里不一样?
先确认三段一致:一是内容范围,是否包含了文件外的换行或空格(本工具把输入框内容按 UTF-8 编码后整体计算);二是换行符,Windows 的 CRLF 与 Linux 的 LF 是两个不同字节;三是编码,中文内容必须两边都按 UTF-8。
CRC32 结果是 8 位还是 10 位?
十六进制是 8 位(例如 cbf43926),对应的十进制最多 10 位(例如 3421780262)。这是同一个 32 位数的两种写法,没有精度差异;如果对方给的是十进制,直接和结果区的十进制那行比对。
CRC32 能判断文件有没有被人恶意修改吗?
不能。CRC-32 不是密码学摘要,构造两段 CRC32 相同的内容是可行的,而正常文件的 CRC32 又是公开的。它能回答的是「数据在传输路上有没有出错」,不能回答「有没有人故意换了内容」——后者请用 SHA-256。
中文内容算 CRC32 时按什么编码?
统一按 UTF-8 编码后再计算。同一个汉字在 GBK 与 UTF-8 下的字节不同,算出的校验值自然不同;和服务端或压缩包比对时,要先确认双方都用 UTF-8,否则会出现「看着一样却对不上」的情况。
为什么空内容也有校验值?
CRC-32 对空数据也有定义好的结果:00000000(十进制 0)。因为算法会先把寄存器置初值,再对 0 个字节做处理,最后与掩码异或,得到的正好是 0。所以空输入不是「没算」,而是一个合法结果。
CRC32 和 CRC32C、Adler-32 是同一个算法吗?
不是。CRC32C(Castagnoli)用的多项式不同,常见于 iSCSI、SSE4.2 指令与部分文件系统;Adler-32 是 zlib 里的另一个更快的弱校验算法。三者的值互不相同,比对时必须确认对方用的是哪一种,本工具实现的是最常见的 IEEE 802.3 版本。
这个页面的计算会上传内容吗?
不会。计算完全在浏览器内完成,输入不经过服务器,也不写访问日志;本工具没有历史记录区块,粘贴内部数据时也不必担心留痕。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。