繁体   English   中英

普通Javascript中的字母数字哈希函数

[英]Alphanumeric hash function in plain Javascript

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

但是,是否还存在非加密哈希,即仅一串不需要cryptoPromises的字母数字? 我既需要加密哈希,也需要非加密哈希。

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

最终答案:

现代浏览器通过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);
};

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

请注意,如果您不需要加密强度高的哈希(没有弄清目的),那么可能会有更好(更快)的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM