纯 JavaScript 中的字母数字哈希函数

Y.S*_*Y.S 0 javascript algorithm hash

我正在寻找一种将给定字符串转换为字母数字哈希的方法。代码将在客户端执行,并且最多必须完全使用 vanilla JS 或 jQuery。

然而,是否还有一个非加密哈希,即只是一串不需要cryptoand的字母数字字符串Promises?我需要两者,即加密和非加密哈希。

第二个散列可以是普通的字母数字字符串,例如 10 个字符长。它应该是可恢复的,即应该始终为给定的字符串重新创建相同的哈希值。如果第二个哈希不是异步生成的(即使用Promises),那就更好了。boolean我打算将它用作in的键window.localStorage(对于许多不同的字符串)。

最终答案:

Evk*_*Evk 5

现代浏览器通过对象提供加密算法实现window.crypto您可以通过此链接(位于底部)了解“现代”在这种情况下的含义。如果您对支持的浏览器列表感到满意,那么您可以达到您的目标,例如如下所示:

async function hash(target){
   var buffer = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(target));
   var chars = Array.prototype.map.call(new Uint8Array(buffer), ch => String.fromCharCode(ch)).join('');
   return btoa(chars);
};
Run Code Online (Sandbox Code Playgroud)

它将使用 SHA-256 对您的字符串(其 utf-8 编码的字节)进行哈希处理,然后将结果转换为 base64。

请注意,如果您不需要加密强哈希(您没有明确目的) - 那么可能有更好(更快)的替代方案。