当前位置:在线工具>加密解密>在线CRC32计算器

🔢 在线 CRC32 计算器

文本/文件 CRC32 计算 · 多种输出格式
💡 输入文本或选择文件将自动计算 CRC32

📖 关于 CRC32

🔍 算法简介
CRC32(Cyclic Redundancy Check 32-bit)是一种循环冗余校验码,广泛用于数据完整性校验、网络通信、文件校验等场景。
⚙️ 特点
CRC32 生成 32 位(4 字节)校验值,计算速度快,碰撞率较低。本工具输出为 0~4294967295 之间的正整数。
📌 使用场景
ZIP 文件校验、以太网帧、PNG 图片校验、数据去重等。常用于快速验证文件完整性。
🛡️ 安全提示
CRC32 不是加密哈希,不应用于安全敏感场景(如密码存储)。本工具所有计算均在浏览器本地进行,数据不上传服务器。
💧 示例
已预填默认值,助您快速上手。点击清空,重新输入。

CRC32 简介


CRC32是一种广泛使用的循环冗余校验(Cyclic Redundancy Check)算法,用于检测数据传输或存储中的错误。下面是对CRC32的简要概述:

1. 基本概念

CRC32通过对数据进行多项式除法运算来生成一个32位的校验和。这个校验和可以用于验证数据的完整性,即数据在传输或存储过程中是否发生了变化。

2. 工作原理

CRC32算法使用一个特定的多项式(通常是IEEE 802.3多项式0xEDB88320)来进行计算。数据被视为一个长序列的二进制位,然后这个序列被除以多项式。除法运算的结果(余数)就是CRC32校验和。

3. 应用场景

CRC32广泛应用于各种数据传输和存储协议中,如以太网、ZIP压缩文件、Git版本控制系统等。它用于确保数据在传输或存储过程中没有损坏。

4. 实现方式

CRC32可以通过硬件实现(如网络接口的专用CRC电路)或软件实现(如编程语言中的库函数)。软件实现通常涉及位操作和循环计算。

PHP、Go 语言 CRC32 字符串计算的例子


Example PHP

示例 #1 PHP (PHP >= 4.0.1, PHP 5, PHP 7, PHP 8) crc32 — 计算一个字符串的 crc32 多项式。

<?php
$checksum = crc32("The quick brown fox jumped over the lazy dog.");
printf("%u\n", $checksum);

Output of the above example in PHP 8.5.0: 2191738434

警告:由于 PHP 的整数类型是有符号的,所以在 32 位系统上许多 crc32 校验和将产生负整数。不过在 64 位上所有 crc32() 的结果将都是正整数。

因此需要使用 sprintf()printf() 的“%u”格式标志符获取十进制格式的无符号 crc32 校验和的字符串表示形式。

对于十六进制的校验和可以使用 sprintf()printf() 的“%x”格式标志符或 dechex() 转换程序,这两个函数负责将 crc32() 结果转为无符号整数。

64 位的设备也会返回负数,更高的结果值会破坏十六进制转换,因为负数会得到额外的 0xFFFFFFFF######## 偏移量。由于十六进制似乎是最常见的用例,所以决定不破坏该原则,即使从 32 位移动到 64 位时破坏了大约 50% 的十进制直接比较。

回想一下,让函数返回整数可能不是最好的主意,而立即返回十六进制的字符串(例如 md5())可能是更好的开始。

可移植方案可以考虑通用的 hash()。hash("crc32b", $str) 返回跟 str_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT) 相同的字符串。

Example Go

示例 #1 Go(Go >= 1.22.2)在 Go 语言中,处理 CRC32 哈希值通常会涉及到使用 hash/crc32 包。CRC32 哈希值默认是以 32 位无符号整数形式表示的。

package main
    
import (
"fmt"
"hash/crc32"
)

func main() {
// 创建一个使用IEEE多项式的CRC32哈希
crc32q := crc32.MakeTable(crc32.IEEE)
// 计算字符串的CRC32哈希值
crcValue := crc32.Checksum([]byte("The quick brown fox jumped over the lazy dog."), crc32q)
// 将CRC32哈希值以十进制格式打印
fmt.Printf("CRC32: %d\n", crcValue)
}

Output:2191738434

如果你需要以十六进制格式表示 CRC32 值,可以使用 %x 或 %X 格式化:

fmt.Printf("CRC32: %x\n", crcValue) // 以小写十六进制打印

Output:82a34642

fmt.Printf("CRC32: %X\n", crcValue) // 以大写十六进制打印

Output:82A34642