Crypto Hmac node.js эквивалент для ruby для следующей функции
function hmac(key, string, encoding) {
return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding);
}
function hash(string, encoding) {
return crypto.createHash('sha256').update(string, 'utf8').digest(encoding);
}
Для приведенной выше функции кодирование hmac является необязательным, или же оно имеет значение 'hex'. Я проверил библиотеку OpenSsl в ruby и нашел похожие функции, но не получил те же выходные данные при работе в ruby.
Следующая ссылка используется в качестве ссылки в некоторой степени, но не совсем. Никто не сталкивался с подобным вариантом использования. Пожалуйста, дайте мне знать
1 ответ
Это очень старый вопрос, но я просто пытался сделать то же самое и подумал, что опубликовать ответ для потомков не повредит.
Ruby-эквиваленты, которые я придумал, значительно более многословны, потому что я не знаю, как передать кодировку в качестве аргумента любому из методов.
Замечания: base64
а также hex
кодировки между JS и Ruby эквивалентны. Похоже, что может быть разница в выводе узла latin1
кодирование в зависимости от того, как настроен Ruby, но я считаю, что необработанные байты эквивалентны.
require 'openssl'
require 'base64'
def hmac(key, string, encoding = 'hex')
hmac = OpenSSL::HMAC.new(key, 'sha256')
hmac << string
case encoding
when 'base64'
Base64.encode64(hmac.digest)
when 'hex'
hmac.hexdigest
else
hmac.digest
end
end
def hash(string, encoding = 'hex')
sha256 = OpenSSL::Digest::SHA256.new
sha256 << string
case encoding
when 'base64'
Base64.encode64(sha256.digest)
when 'hex'
sha256.hexdigest
else
sha256.digest
end
end
key = "NjNsSSpyaE83NyZGaGdpYXhLQmFjVUJhZ3UyMENqZWY="
string = "this is a test"
encoding = "hex";
puts hmac(key, string, encoding) # => adb2946c2815047327d51459b401836cebb1a31644604303b4886b028bb98e69
puts hash(string, encoding) # => 2e99758548972a8e8822ad47fa1017ff72f06f3ff6a016851f45c398732bc50c
И чтобы проверить, вы можете просто запустить эквивалент в узле
var key = "NjNsSSpyaE83NyZGaGdpYXhLQmFjVUJhZ3UyMENqZWY="
var string = "this is a test"
var encoding = "hex";
console.log(hmac(key, string, encoding)) // => adb2946c2815047327d51459b401836cebb1a31644604303b4886b028bb98e69
console.log(hash(string, encoding)) // => 2e99758548972a8e8822ad47fa1017ff72f06f3ff6a016851f45c398732bc50c