OneOfOne/xxhash

GitHub: OneOfOne/xxhash

XXHash 极速非加密哈希算法的 Go 语言原生实现,提供接近内存极限的处理速度。

Stars: 446 | Forks: 35

# xxhash [![GoDoc](https://godoc.org/github.com/OneOfOne/xxhash?status.svg)](https://godoc.org/github.com/OneOfOne/xxhash) [![Build Status](https://travis-ci.org/OneOfOne/xxhash.svg?branch=master)](https://travis-ci.org/OneOfOne/xxhash) [![Coverage](https://gocover.io/_badge/github.com/OneOfOne/xxhash)](https://gocover.io/github.com/OneOfOne/xxhash) 这是优秀的 [xxhash](https://github.com/Cyan4973/xxHash)* 算法的原生 Go 实现,它是一种极速的非加密 Hash 算法,处理速度接近 RAM 的极限。 * C 实现 ([Copyright](https://github.com/Cyan4973/xxHash/blob/master/LICENSE) (c) 2012-2014, Yann Collet) ## 安装 ``` go get github.com/OneOfOne/xxhash ``` ## 功能 * 在 Go 1.7+ 版本中,对于所有输入,纯 Go 版本比 CGO 版本更快。 * 支持 ChecksumString{32,64} 和 xxhash{32,64}.WriteString,在条件允许时不使用拷贝,在 appengine 上则回退到拷贝方式。 * 原生版本在 appengine 上会回退到优化程度较低的版本,因为无法使用 unsafe。 * 几乎和才华横溢的 [cespare](https://github.com/cespare/xxhash) 编写的几乎纯汇编版本一样快,同时还支持 seeds。 * 要手动切换 appengine 版本,请使用 `-tags safe` 进行构建。 ## 基准测试 ### Core i7-4790 @ 3.60GHz, Linux 4.12.6-1-ARCH (64bit), Go tip (+ff90f4af66 2017-08-19) ``` ➤ go test -bench '64' -count 5 -tags cespare | benchstat /dev/stdin name time/op # https://github.com/cespare/xxhash XXSum64Cespare/Func-8 160ns ± 2% XXSum64Cespare/Struct-8 173ns ± 1% XXSum64ShortCespare/Func-8 6.78ns ± 1% XXSum64ShortCespare/Struct-8 19.6ns ± 2% # 此包(默认模式,使用 unsafe) XXSum64/Func-8 170ns ± 1% XXSum64/Struct-8 182ns ± 1% XXSum64Short/Func-8 13.5ns ± 3% XXSum64Short/Struct-8 20.4ns ± 0% # 此包(appengine,*不*使用 unsafe) XXSum64/Func-8 241ns ± 5% XXSum64/Struct-8 243ns ± 6% XXSum64Short/Func-8 15.2ns ± 2% XXSum64Short/Struct-8 23.7ns ± 5% CRC64ISO-8 1.23µs ± 1% CRC64ISOString-8 2.71µs ± 4% CRC64ISOShort-8 22.2ns ± 3% Fnv64-8 2.34µs ± 1% Fnv64Short-8 74.7ns ± 8% ``` ## 用法 ``` h := xxhash.New64() // r, err := os.Open("......") // defer f.Close() r := strings.NewReader(F) io.Copy(h, r) fmt.Println("xxhash.Backend:", xxhash.Backend) fmt.Println("File checksum:", h.Sum64()) ``` [运行环境](https://play.golang.org/p/wHKBwfu6CPV) ## 待办事项 * 重写 32 位版本以进行更深度的优化。 * 随着 Go inliner 变得更加智能,进行常规代码清理。 ## 许可证 本项目基于 Apache v2. 许可证发布。详情请参阅 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Ruby工具, XXHash, 哈希算法, 开发工具库, 日志审计, 非加密哈希