簡體   English   中英

Ruby 和其他語言(Python、JavaScript)不同的 hmac sha256 結果

[英]Ruby and other languages(Python, JavaScript) different hmac sha256 result

我有使用 sha256 創建 hmac 的 Ruby 2.5.3 代碼

require 'openssl'

key = '4629de5def93d6a2abea6afa9bd5476d9c6cbc04223f9a2f7e517b535dde3e25'
message = 'lucas'
hash = OpenSSL::HMAC.hexdigest('sha256', key, message)

hash => ba2e2505c6f302fb3c40bea4491d95bacd96c3d12e8fbe50197ca431165fcee2

但結果與 Python 和 JavaScript 代碼不同。 我應該在 Ruby 代碼中做什么才能獲得與其他代碼相同的結果?

Python

import hmac
import hashlib
import binascii

message = "lucas"
key = "4629de5def93d6a2abea6afa9bd5476d9c6cbc04223f9a2f7e517b535dde3e25"
hash = hmac.new(
    binascii.unhexlify(bytearray(key, "utf-8")),
    msg=message.encode('utf-8'),
    digestmod=hashlib.sha256
).hexdigest()

hash => 99427c7bba36a6902c5fd6383f2fb0214d19b81023296b4bd6b9e024836afea2

JavaScript

const crypto = require('crypto');

const message = 'lucas';
const key = '4629de5def93d6a2abea6afa9bd5476d9c6cbc04223f9a2f7e517b535dde3e25';

const hash = crypto.createHmac('sha256', Buffer.from(key, 'hex'))
                .update(message)
                .digest('hex');

hash => 99427c7bba36a6902c5fd6383f2fb0214d19b81023296b4bd6b9e024836afea2

在 Python 和 JS 中,您使用“key”作為十六進制字符串,這意味着十六進制字符串被轉換為二進制格式。 在 Ruby 中,密鑰無需轉換即可使用。 — 邁克爾·費爾

這給了我解決方案。

key = '4629de5def93d6a2abea6afa9bd5476d9c6cbc04223f9a2f7e517b535dde3e25'
message = 'lucas'
puts OpenSSL::HMAC.hexdigest('sha256', [key].pack('H*') , message)

hash => 99427c7bba36a6902c5fd6383f2fb0214d19b81023296b4bd6b9e024836afea2

謝謝你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM