【问题标题】:HMAC Binary Digest Node vs RubyHMAC 二进制摘要节点与 Ruby
【发布时间】:2019-05-05 21:45:05
【问题描述】:

我正在尝试使用 Ruby 文档(呃)实现一个 Node API。具体问题在于验证一个秘密,该秘密通过 HMAC 摘要然后进行 base64 编码。

我似乎无法将两者等同起来。以下是 Node 和 Ruby 中的相同 sn-ps:

注意:以下内容也可以通过repl.it在线查看:

节点

const crypto = require('crypto');

let text = 'example';
let key  = '123';

let h = crypto.createHmac('sha256', key).update(text).digest('binary');
Buffer.from(h).toString('base64');
# => 'acKNVMOwSUUowqdZw7HCnMKOwofCqcO5wp51wqXCiBvCkmfDrjkmwrzDtizCmS3ChMK6'

红宝石

require 'openssl'
require 'base64'

text = 'example'
key  = '123'

h = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, text)
Base64.strict_encode64(h)
# => 'aY1U8ElFKKdZ8ZyOh6n5nnWliBuSZ+45Jrz2LJkthLo='

同时切换到十六进制工作,例如

节点

crypto.createHmac('sha256', key).update(text).digest('hex')

红宝石

OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, text)

不幸的是,我不能切换到十六进制 - 网络服务使用 ruby​​ 代码进行签名。

查找 OpenSSL::HMAC.digest 状态的 ruby​​ 文档:

二进制字符串的形式返回验证码。

只是从 HMAC 输出结果,我无法判断这是差异还是渲染问题:

节点

crypto.createHmac('sha256', key).update(text).digest('binary');
# => 'iTðIE(§Yñ©ùu¥\u001bgî9&¼ö,-º'

红宝石

OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, text)
# => "i\x8DT\xF0IE(\xA7Y\xF1\x9C\x8E\x87\xA9\xF9\x9Eu\xA5\x88\e\x92g\xEE9&\xBC\xF6,\x99-\x84\xBA"

我怎样才能让这两者等同起来?

谢谢!

【问题讨论】:

    标签: node.js ruby encoding hmac


    【解决方案1】:

    通过不向 Node 的摘要方法输入任何特定编码,输出原始 unicode 缓冲区 - 匹配 Ruby。

    这是最终结果:

    crypto = require('crypto');
    
    text = 'example';
    key  = '123';
    
    h = crypto.createHmac('sha256', key).update(text).digest();
    Buffer.from(h).toString('base64');
    

    谁会想到 - 你不能将任何东西传递给方法......

    【讨论】:

      【解决方案2】:

      让 Ruby 输出 Base64:

      require 'openssl'
      require 'base64'
      
      text = 'example'
      key  = '123'
      
      Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, text))
      # "aY1U8ElFKKdZ8ZyOh6n5nnWliBuSZ+45Jrz2LJkthLo=\n"
      

      如果需要,您可以删除 \n 换行符和尾随填充。

      【讨论】:

        猜你喜欢
        • 2018-02-28
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多