fnv-plus 生成 Hash 哈希算法的 Npm 包

发布于 2020-05-18 20:21:33 字数 4075 浏览 2056 评论 0

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字符串
  • 返回十六进制字符串

相关链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文