首页 > 解决方案 > HMAC SHA256 - 将服务器端 Ruby 代码转换为客户端 Javascript 代码

问题描述

我想将在服务器上运行的现有 Ruby 函数转换为将在客户端浏览器中运行的 Javascript 代码。

该函数通过导入参数数组和密钥来创建 SHA256 签名。

这是Ruby函数:

def params_with_signature(params, secret)
  params = params.reject { |_k, v| v.nil? }
  query_string = URI.encode_www_form(params)
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret, query_string)
  params = params.merge(signature: signature)
end

这是通过 Ruby 函数传递的数据:

secret = 'abcdef'

params = {
  one: 'a',
  two: 'b',
  three: 'c'
}

puts params_with_signature(params, secret)

我在 Forge 项目中使用标准 sha256(没有 HMAC)取得了一些进展:

<script src='https://cdn.jsdelivr.net/npm/node-forge@0.7.0/dist/forge.min.js'></script>
<script>
  var string = 'The quick brown fox jumps over the lazy dog';
  var md = forge.md.sha256.create();
  md.update(string);
  hashed_string = (md.digest().toHex());
  console.log(hashed_string)
</script>

看起来他们确实有一个 HMAC 模块,但我对 Javascript 的熟悉程度不足以实现(https://github.com/digitalbazaar/forge#hmac)。

这里的底线是我希望所有这些都在客户端设备上运行。我不希望对 node.js 执行此操作,因为我知道它也在服务器上运行。

谢谢!

标签: javascriptrubycryptographysha256hmac

解决方案


推荐阅读