[英]Alphanumeric hash function in plain Javascript
我正在寻找一种将给定字符串转换为字母数字哈希的方法。 该代码将在客户端执行,并且最多必须完全在原始JS或jQuery中。
但是,是否还存在非加密哈希,即仅一串不需要crypto
和Promises
的字母数字? 我既需要加密哈希,也需要非加密哈希。
第二个哈希可以是一个普通的字母数字字符串,长度为10个字符。 它应该是可恢复的,即应始终为给定的字符串重新创建相同的哈希。 如果第二个哈希值不是异步生成的(即使用Promises
),那会更好。 我打算将其用作window.localStorage
的boolean
的键(用于许多不同的字符串)。
最终答案:
现代浏览器通过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.