首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在原生JavaScript中是否有可用的单向散列函数?

在原生JavaScript中是否有可用的单向散列函数?
EN

Stack Overflow用户
提问于 2011-02-25 06:12:56
回答 3查看 33.8K关注 0票数 45

我希望能够基于散列字符串为用户创建唯一的令牌*。例如,我知道我可以使用md5()库,但因为它的目的不是加密,所以我想知道是否有什么东西可以“开箱即用”。在原生JavaScript中是否有可用的单向散列函数?

*我意识到这些并不是严格意义上的独一无二。我认为哈希冲突的可能性很小。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-20 15:03:59

在2020年,有一个原生API:

SubtleCrypto.digest()

https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest

示例:

代码语言:javascript
复制
crypto.subtle
  .digest("SHA-256", new TextEncoder().encode("hello"))
  .then(console.log);

十六进制字符串转换:

代码语言:javascript
复制
const digest = async ({ algorithm = "SHA-256", message }) =>
  Array.prototype.map
    .call(
      new Uint8Array(
        await crypto.subtle.digest(algorithm, new TextEncoder().encode(message))
      ),
      (x) => ("0" + x.toString(16)).slice(-2)
    )
    .join("");

digest({message: "hello"}).then(console.log)

票数 12
EN

Stack Overflow用户

发布于 2011-02-25 09:29:51

在原生JavaScript中没有可用的东西。你可以使用像Murmurhash这样的东西。这里有一个JavaScript实现:https://github.com/garycourt/murmurhash-js。我没有用过它,所以不能保证它。

更新:现在JavaScript中有多个可用的Murmurhash3实现。但是,它们中的许多都存在将字符串编码为字节的问题,并且与参考C++实现相比可能会产生不同的结果。您可以使用read an analysis on this heremurmurhash3js-revisited库实现了该函数的所有三个变体,并且符合参考。

票数 6
EN

Stack Overflow用户

发布于 2016-05-25 01:27:23

在未来,这可能通过目前正在试验的Web Crypto API来实现

https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API

https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto

诚然,在撰写本文时,在生产环境中使用它是不现实的,并且可能是一个移动的目标。然而,未来5年谁知道呢?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5111164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档