我想将服务器上运行的现有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这样做,因为我知道它也可以在服务器上运行。
谢谢!