我取了cksum
中的source code并复制了该多项.这与Go标准库中定义的预定义的IEEE变体相同.
package main
import (
"fmt"
"hash/crc32"
)
// https://github.com/coreutils/coreutils/blob/a9b78541fa7c06567c5b82fb4e89d85a1dc0c611/src/cksum.c#L54
//
// 32 26 23 22 16 12 11 10 8 7 5 4 2 1
// G(X)=X + X + X + X + X + X + X + X + X + X + X + X + X + X + 1
const p = 0b11101101101110001000001100100000
func main() {
cksum := crc32.MakeTable(p)
fmt.Println(crc32.Checksum([]byte("moin"), cksum))
fmt.Println(crc32.ChecksumIEEE([]byte("moin")))
}
结果是:3048661102
但当我在Debian 12(coreutils 9.1)上使用cksum
时,结果是不同的:
$ printf "moin" | cksum
1401816862 4
这里出了什么问题?
Update
我认为这个问题解释了here.
但问题仍然是:如何像cksum
一样处理"hash/crc 32"?