javascript - 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 执行此操作,因为我知道它也在服务器上运行。
谢谢!
解决方案
推荐阅读
- kubernetes - 在 Helm 中使用子图表中的图表值
- c - 使用pthreads从C中的两个不同线程写入相同的指针
- reactjs - react-daterange-picker 并排显示上个月
- java - 如何在java JFrame中验证表单是否为空
- assembly - 存在用于 (rv64ima-lp64) 软浮点编译的 risc-v 浮点指令
- java - KeyEvent 不打印命令
- javascript - 对 addEventListener() 使用 setTimeout
- c++ - 在 C/C++ 中正确链接的一般提示
- javascript - 如何在不改变布局的情况下正确调整 iframe 的大小?
- swiftui - SCNSceneRendererDelegate 中的渲染器函数只通过输入调用,不会自动调用