关注问题本身是值得长期去做的事情,想法一点都不重要。

利用浏览器 crypto 对象生成 hash

function hash(v){
  return crypto.subtle.digest('SHA-256', new TextEncoder('utf-8').encode(v)).then(h => {
    let hexes = [];
    let view = new DataView(h);
    for (let i = 0; i < view.byteLength; i += 4){
      hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8));
    }
    return hexes.join('');
  });
}

它返回的是一个 Promiss 对象

hash('test').then(v=>console.log(v))

输出

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08