OneOfOne/xxhash
GitHub: OneOfOne/xxhash
XXHash 极速非加密哈希算法的 Go 语言原生实现,提供接近内存极限的处理速度。
Stars: 446 | Forks: 35
# xxhash [](https://godoc.org/github.com/OneOfOne/xxhash) [](https://travis-ci.org/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, 哈希算法, 开发工具库, 日志审计, 非加密哈希