我必须在 Javascript 中使用 HMAC sha256 散列文本

Rav*_*Rav 4 javascript

我正在尝试在 Javascript 中使用 HMAC SHA-256 散列文本我有 [secret Ket]

我有 Ruby 代码要散列,但我需要 Javascript 代码来散列文本

红宝石代码

OpenSSL::HMAC.hexdigest(
  'sha256', # hash function
  'HFgGgIOaLiyFgUhIjirOoqxloHuiLNr20jkhXrNw', # secret key (keep safe!)
  current_user.email # user's email address
)
Run Code Online (Sandbox Code Playgroud)

请建议我任何解决方案。

NVR*_*VRM 11

使用Web 加密本机 api,取自此来源

async function HMAC(key, message){
  const g = str => new Uint8Array([...unescape(encodeURIComponent(str))].map(c => c.charCodeAt(0))),
  k = g(key),
  m = g(message),
  c = await crypto.subtle.importKey('raw', k, { name: 'HMAC', hash: 'SHA-256' },true, ['sign']),
  s = await crypto.subtle.sign('HMAC', c, m);
  [...new Uint8Array(s)].map(b => b.toString(16).padStart(2, '0')).join('');
  return btoa(String.fromCharCode(...new Uint8Array(s)))
}

/* TEST */
HMAC("mypassword", "Hello world!")
 .then(e => console.log(e))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,非常有帮助。我更改了您的函数 g() 以使用 TextEncoder。const 编码器 = new TextEncoder() const messageBytes = 编码器.encode(message) (3认同)

Mor*_*sen 4

我认为 CryptoJS 可以使用

CryptoJS.HmacSHA256(current_user.email, 'HFgGgIOaLiyFgUhIjirOoqxloHuiLNr20jkhXrNw') .toString(CryptoJS.enc.Hex)