我希望能够基于散列字符串为用户创建唯一的令牌*。例如,我知道我可以使用md5()库,但因为它的目的不是加密,所以我想知道是否有什么东西可以“开箱即用”。在原生JavaScript中是否有可用的单向散列函数?
*我意识到这些并不是严格意义上的独一无二。我认为哈希冲突的可能性很小。
发布于 2020-08-20 15:03:59
在2020年,有一个原生API:
SubtleCrypto.digest()
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
示例:
crypto.subtle
.digest("SHA-256", new TextEncoder().encode("hello"))
.then(console.log);
十六进制字符串转换:
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)
发布于 2011-02-25 09:29:51
在原生JavaScript中没有可用的东西。你可以使用像Murmurhash这样的东西。这里有一个JavaScript实现:https://github.com/garycourt/murmurhash-js。我没有用过它,所以不能保证它。
更新:现在JavaScript中有多个可用的Murmurhash3实现。但是,它们中的许多都存在将字符串编码为字节的问题,并且与参考C++实现相比可能会产生不同的结果。您可以使用read an analysis on this here,murmurhash3js-revisited库实现了该函数的所有三个变体,并且符合参考。
发布于 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年谁知道呢?
https://stackoverflow.com/questions/5111164
复制相似问题