HMAC SHA256 - преобразование кода Ruby на стороне сервера в код Javascript на стороне клиента - PullRequest
0 голосов
/ 07 января 2019

Я хотел бы преобразовать мою существующую функцию 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)

Я добился определенного прогресса, используя стандартный sha256 (без HMAC) с проектом Forge:

<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, потому что я знаю, что он также работает на сервере.

Спасибо!

...