当前位置:在线工具>加密解密>在线CRC32加密
手机访问

在线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) // 以小写十六进制打印
fmt.Printf("CRC32: %X\n", crcValue) // 以大写十六进制打印

CRC32说明

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

1、基本概念‌

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

2、工作原理

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

3、应用场景

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

4、实现方式

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