Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在本机JavaScript中是否有任何单向散列函数可用?_Javascript_Hash - Fatal编程技术网

在本机JavaScript中是否有任何单向散列函数可用?

在本机JavaScript中是否有任何单向散列函数可用?,javascript,hash,Javascript,Hash,我希望能够基于散列字符串为用户创建唯一的令牌*。例如,我知道我可以使用md5()库,但由于其目的不是加密,我想知道是否有什么东西可以“开箱即用”使用。在本机JavaScript中是否有单向散列函数可用 *我意识到这些并不是绝对独一无二的。我认为散列冲突的可能性很小。本机JavaScript中没有可用的内容。你可以用类似的东西。这里有一个JavaScript实现:。我还没用过,所以不能担保 更新:现在JavaScript中有多个HASH3实现可用。然而,许多人都有将字符串编码为字节的问题,并且与引

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


*我意识到这些并不是绝对独一无二的。我认为散列冲突的可能性很小。

本机JavaScript中没有可用的内容。你可以用类似的东西。这里有一个JavaScript实现:。我还没用过,所以不能担保


更新:现在JavaScript中有多个HASH3实现可用。然而,许多人都有将字符串编码为字节的问题,并且与引用C++实现相比,可以产生不同的结果。可以这样做,该库实现了函数的所有三个变体,并符合引用。

JavaScript没有本机哈希,但有许多库

我建议加密js

例如,要使用SHA1,只需执行以下操作:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/sha1.js"></script>
<script>
    var hash = CryptoJS.SHA1("Message");
</script>

var hash=CryptoJS.SHA1(“消息”);

从长远来看,这可能与目前正在试验的Web Crypto API有关


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

在2020年,有一个本地API:

sublecrypto.digest()

例如:

加密
.digest(“SHA-256”,新的TextEncoder().encode(“hello”))
.然后(console.log);
十六进制字符串转换:

const digest=async({algorithm=“SHA-256”,message})=>
Array.prototype.map
.打电话(
新UINT8阵列(
wait crypto.division.digest(算法,新的textcoder().encode(消息))
),
(x) =>(“0”+x.toString(16)).slice(-2)
)
.加入(“”);

摘要({message:“hello”})。然后(console.log)
您可能会喜欢这个问题-是的,非常喜欢。我需要一个单向散列vs.GUIDs。我有一个大字符串,每次都想以同样的方式将它散列成一个小字符串。md5就是为了这个目的而工作的,但似乎有些过头了。就我个人而言,我真的很想探索一下如何使用它在使用localStorage的站点之间共享代码(有一种允许跨域使用的黑客)。例如,加密签名可以防止站点将恶意代码屏蔽为jQuery的保存版本。CDN现在可以这样做,但需要HTTP请求。