2016-03-09 6 views
0

Я пытаюсь создать HMAC сообщения. Алгоритм генерации HMAC - SHA256. Проблема в том, что у меня есть ключ с кодировкой base64 (общий секрет). Как я могу расшифровать эту тайну, чтобы получить требуемое HMACсоздание HMAC в Nodejs с секретным кодом base64

код примера:

var hmac = require('crypto').createHmac('SHA256', "SOME_BASE64_ENCODED_SHARED_SECRET").update("MESSAGE").digest('base64'); 

Этот HMAC отправляется на службу Java. Как это делает HMAC поколение выглядит следующим образом:

Mac mac = Mac.getInstance("HmacSha256"); 
SecretKey sharedKey = new SecretKeySpec(Base64.getDecoder().decode("SOME_BASE64_ENCODED_SHARED_SECRET"), "TlsPremasterSecret"); 
mac.init(sharedKey); 
byte[] messageBytes = "MESSAGE".getBytes("UTF-8"); 
byte[] expectedHmac = mac.doFinal(messageBytes); 
String hmac = Base64.getEncoder().encodeToString(expectedHmac)); 

Теперь, HMACs порожденные моей nodejs код не совпадает с кодом службы Java. Как решить эту проблему?

+0

ли вы попробовать * декодирование * кодировку base64 секретный перед передачей его в 'createHmac()' (например, 'крипт. createHmac ('SHA256', новый буфер ('base64-encoded-secret', 'base64')). update (... ')? – mscdex

+0

Yay! Это сработало! Спасибо тонну :) – nobrains

ответ

0

base64 В закодирована тайных потребностей, чтобы быть расшифрован перед передачей его в crypto.createHmac():

var secret = new Buffer('SOME_BASE64_ENCODED_SHARED_SECRET', 'base64'); 
var hmac = require('crypto').createHmac('SHA256', secret) 
          .update('MESSAGE') 
          .digest('base64'); 
Смежные вопросы