Подпись с HMAC SHA-256 и Base64Encoder

Я много пробовал для создания подписи для доступа к одному веб-сервису.

Они требовали, чтобы я генерировал подпись с каждым запросом.

Для создания подписи у меня есть одно сообщение «abc» и один секретный ключ «xyz». По их мнению, моя подпись должна обрабатываться как следующий рубиновый код

require 'base64'

require 'openssl'

secret = "xyz"

request = "abc"

digest = OpenSSL::Digest::Digest.new('sha256')

signature = Base64.encode64(OpenSSL::HMAC.digest(digest, secret, request)).chomp

signature должно быть 9ZjsfVB3k5nPNLf5he+gfyYaxNWCIJ6J8YcRpxW5GG0=, но я не получаю этого, используя код Java, который выглядит следующим образом:

 SecretKey secretKey = null;    

 byte[] keyBytes = keyString.getBytes("UTF-8");     

 Mac mac = Mac.getInstance("HMACHSA256");

 secretKey = new SecretKeySpec(keyBytes,mac.getAlgorithm());

 mac.init(secretKey);   

 byte[] text = baseString.getBytes("UTF-8");

 //mac.update(digest.digest());

 byte[] encodedText = mac.doFinal(text);    

 return new String(Base64.encodeBase64(encodedText)).trim();

Пожалуйста помоги мне с этим.


person user1141515    schedule 10.01.2012    source источник
comment
HMACHSA256 — это опечатка? Это фактически работающий код, который вы вставили? Разве эта строка не должна быть для начала HMACSHA256?   -  person TacticalCoder    schedule 10.01.2012
comment
да, это мой рабочий код, и я получаю подпись, но это неправильная подпись.   -  person user1141515    schedule 11.01.2012
comment
@ user1141515: Забавно, вы должны получить NoSuchAlgorithmException — я также думаю, что вы хотели ввести HMACSHA256 выше.   -  person Edward Thomson    schedule 11.01.2012
comment
Я сделал немного PHP раньше. Я не делал Руби. Но это Руби, не так ли?   -  person demongolem    schedule 01.02.2014


Ответы (1)


Я запустил код Java и получил oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

Я зашел на этот сайт и получил oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

Я запустил верхний скрипт как скрипт ruby и получил oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

Поскольку эти три совпадают, я предполагаю, что весь приведенный выше код согласован, но значение, которое вы сообщаете, неверно. Приведенный выше код Java в значительной степени является учебником HMACSHA256 для Java, но я не могу комментировать часть Ruby, потому что я всего лишь специалист по Java.

person demongolem    schedule 31.01.2014