CRC32
概述
CRC代表循环冗余检查,这是一种常用的方法,用于验证数字数据的完整性。它是一种用于检测在数据传输或存储过程中是否发生错误的算法。CRC生成一个数据的简短校验和或哈希,附加在数据上。当数据被接收或检索时,重新计算CRC并与原始校验和比较。如果两个校验和匹配,则假定数据未被损坏。如果它们不匹配,则表明发生了错误,需要重新发送或再次检索数据。
CRC32 IEEE版本用于TL-B方案。通过查看此NFT操作码示例,可以更清楚地理解各种消息的TL-B计算。
工具
在线计算器
VS Code扩展
Python
import zlib
print(zlib.crc32(b'<TL-B>') & 0x7FFFFFFF)
Go
func main() {
var schema = "some"
schema = strings.ReplaceAll(schema, "(", "")
schema = strings.ReplaceAll(schema, ")", "")
data := []byte(schema)
var crc = crc32.Checksum(data, crc32.MakeTable(crc32.IEEE))
var b_data = make([]byte, 4)
binary.BigEndian.PutUint32(b_data, crc)
var res = hex.EncodeToString(b_data)
fmt.Println(res)
}
TypeScript
import * as crc32 from 'crc-32';
function calculateRequestOpcode_1(str: string): string {
return (BigInt(crc32.str(str)) & BigInt(0x7fffffff)).toString(16);
}
function calculateResponseOpcode_2(str: string): string {
const a = BigInt(crc32.str(str));
const b = BigInt(0x80000000);
return ((a | b) < 0 ? (a | b) + BigInt('4294967296') : a | b).toString(16);
}