fnv-plus 生成 Hash 哈希算法的 Npm 包
FNV-1a 散列算法通常被简单地称为 FNV,它在 n 位散列空间中散布散列,具有很好的分散性,而且速度非常快。
使用此模块为 JavaScript 字符串或对象生成唯一的散列/校验和值。
注:FNV-1a 算法甚至不适合作为密码伪随机生成器,也不应该被用来保护任何事物的安全。它的确是唯一的,但不是随机的。
为什么使用 FNV+?
- 这是最快为 Node.js 提供的 FNV 实现(谢谢 desudesutalk)。参见 Benchmarks.
- 它是唯一能够为大于 32 位的密钥空间生成 FNV 散列的 NPM 模块。
fnv-plus
经过了很好的测试。许多其他的 FNV 实现没有提供任何单元测试来证明它们的工作能力和性能。fnv-plus
实现了 FNV-1a 的 52 位版本,它提供了更大的哈希空间,同时仍然使用 Javascript 的 53 位整数空间。
安装
$ npm install fnv-plus --save
使用
var fnv = require('fnv-plus'),
astring = 'hello world',
ahash52 = fnv.hash(astring), // 52-bit hash by default
ahash64 = fnv.hash(astring, 64); // 64-bit hash specified
console.log(ahash52.hex() == 'a65e7023cd59e'); //true
console.log(ahash52.str() == 'stglysbf6m'); //true
console.log(ahash52.dec() == '2926792616498590'); //true
console.log(ahash64.hex() == '779a65e7023cd2e7'); //true
console.log(ahash64.str() == '1th7cxzlyc0dj'); //true
console.log(ahash64.dec() == '8618312879776256743'); //true
// fast variants
console.log(fnv.fast1a32hex(astring) == 'd58b3fa7'); //true
console.log(fnv.fast1a52hex(astring) == 'a65e7023cd59e'); //true
fnv.seed('foobar testseed');
console.log(fnv.hash(astring, 64).hex() == ahash64.hex()); // false
// ^^ because the default seed is not 'foobar testseed'
API
fnv.hash(string, bitlength)
- 使用给定的位长散列字符串(默认为52)
- 返回
FnvHash
对象
fnv.seed(string)
- 种子算法产生不同的值。用不同的种子散列相同的值很可能会产生不同的结果。在你的种子可以是随机的范围内,它可以作为随机性的来源,但仍然是。不密码PRG(伪随机发生器)的替代品。
- 默认种子是
chongo <Landon Curt Noll> /\>./\\
fnv.useUTF8(bool)
- 控制UTF-8对哈希函数的感知
- 默认值是
false
FnvHash.str()
以ascii字符串的形式返回哈希值。
FnvHash.hex()
以十六进制字符串的形式返回哈希值。
FnvHash.dec()
以十进制字符串的形式返回哈希值。
快速变体
这个函数运行得更快,因为它们没有 LIB-间接费用,参见 Benchmarks 获取更多信息。他们总是计算 1a 版本的散列,并且总是使用默认的种子。直接返回哈希值(不返回 FnvHash
对象)。
fnv.fast1a32(string)
- 计算fnv-1a 32位散列
- 返回int
fnv.fast1a32hex(string)
- 计算fnv-1a 32位散列
- 返回十六进制字符串
fnv.fast1a52(string)
- 计算fnv-1a 52位散列
- 返回int
fnv.fast1a52hex(string)
- 计算fnv-1a 52位散列
- 返回十六进制字符串
fnv.fast1a64(string)
- 计算fnv-1a 64位散列
- 返回十六进制字符串
fnv.fast1a32utf(string)
- 计算fnv-1a 32位散列
- 处理UTF-8字符串
- 返回int
fnv.fast1a32hexutf(string)
- 计算fnv-1a 32位散列
- 处理UTF-8字符串
- 返回十六进制字符串
fnv.fast1a52utf(string)
- 计算fnv-1a 52位散列
- 处理UTF-8字符串
- 返回int
fnv.fast1a52hexutf(string)
- 计算fnv-1a 52位散列
- 处理UTF-8字符串
- 返回十六进制字符串
fnv.fast1a64utf(string)
- 计算fnv-1a 64位散列
- 处理UTF-8字符串
- 返回十六进制字符串
相关链接
- Github 地址:https://github.com/tjwebb/fnv-plus
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论