如何在JavaScript/Node中计算SHA 256散列和Base64字符串编码

k4ymrczo  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(105)

我正在尝试用JavaScript重新创建以下C#代码。

SHA256 myHash = new SHA256Managed();
Byte[] inputBytes = Encoding.ASCII.GetBytes("test");
myHash.ComputeHash(inputBytes);
return Convert.ToBase64String(myHash.Hash);

此代码返回"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg="
这就是我目前所拥有的JavaScript代码

var sha256 = require('js-sha256').sha256;
var Base64 = require('js-base64').Base64;

var sha256sig = sha256("test");

return Base64.encode(sha256sig);

JS代码返回"OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZjMTViMGYwMGEwOA=="
这是我使用过的两个JS库
js-sha256
js-base64
有人知道怎么用吗?我是不是用错了库?

pxyaymoc

pxyaymoc1#

在NodeJS中使用加密函数不需要任何库。

const crypto = require('crypto');

const hash = crypto.createHash('sha256')
                   .update('test')
                   .digest('base64');
console.log(hash); // n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=
ds97pgxw

ds97pgxw2#

如果您的目标用户使用现代浏览器,如chrome和edge,只需使用浏览器Crypto API

const text = 'hello';

async function digestMessage(message) {
  const msgUint8 = new TextEncoder().encode(message);                           // encode as (utf-8) Uint8Array
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);           // hash the message
  const hashArray = Array.from(new Uint8Array(hashBuffer));                     // convert buffer to byte array
  const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
  return hashHex;
}

const result = await digestMessage(text);
console.log(result)

然后可以通过online sha256 tool验证结果。

相关问题