2012-01-10 3 views
0

Я пробовал много для создания подписи для доступа к одной веб-службе.Подпись с 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(); 

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

+1

есть * "HMACHSA256" * опечатка? Это фактический код запуска, который вы вставили? Разве эта строка не должна быть для начала «* HMACSHA256» *? – TacticalCoder

+0

да, это мой код запуска, и я получаю подпись, но ее неправильная подпись. – user1141515

+1

@ user1141515: Прикольно, вы должны получить «NoSuchAlgorithmException» - я также думаю, что вы хотели набрать «HMACSHA256» выше. –

ответ

1

Я побежал код Java и получил oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

Я пошел this онлайн сайта, и я получил oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

Я побежал верхний сценарий как рубиновых сценария, и я получил oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

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

Смежные вопросы