Значение HMAC, вычисленное из Java, не совпадает с кодом Ruby

1

Я должен написать клиентский код Ruby на Java. В коде используется секретный ключ и кодировка Base64 для формирования значения hmac. Я попытался написать аналогичный код на Java, но приведенное значение hmac не совпадает с результатом Ruby-скрипта. Пожалуйста, найдите приведенный ниже код кода для Java & Ruby вместе с приведенным результатом.

Код Java:

public static void main(String[] args)
    throws NoSuchAlgorithmException, InvalidKeyException
{
    // get an hmac_sha1 key from the raw key bytes
    String secretKey =
        "Ye2oSnu1NjzJar1z2aaL68Zj+64FsRM1kj7I0mK3WJc2HsRRcGviXZ6B4W+/V2wFcu78r8ZkT8=";

    byte[] secretkeyByte = Base64.decodeBase64(secretKey.getBytes());
    SecretKeySpec signingKey = new SecretKeySpec(secretkeyByte, "HmacSHA1");
    // get an hmac_sha1 Mac instance and initialize with the signing key.
    String movingFact = "0";
    byte[] text = movingFact.getBytes();
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(signingKey);
    // compute the hmac on input data bytes
    byte[] rawHmac = mac.doFinal(text);
    byte[] hash = Base64.encodeBase64(rawHmac);
    System.out.println("hash :" + hash);
}

Выход Java: хэш: [B @72a32604

Рубиновый код:

  def get_signature()   
    key = Base64.decode64("Ye2oSnu1NjzJar1z2aaL68Zj+64FsRM1kj7I0mK3WJc2HsRRcGviXZ6B4W+/V2wFcu78r8ZkT8=")
    digest = OpenSSL::Digest::Digest.new('sha1')
    string_to_sign = "0"
    hash = Base64.encode64(OpenSSL::HMAC.digest(digest, key, string_to_sign))
    puts "hash: " + hash
  end

Ruby Output: hash: Nxe7tOBsbxLpsrqUJjncrPFI50E =

  • 0
    Вы не сравниваете правильную вещь: stackoverflow.com/questions/1040868/…
  • 1
    byte[] не является String ! Попробуйте вместо этого напечатать new String(hash, StandardCharsets.UTF_8) . Кроме того, вы должны указать кодировку, когда вы .getBytes() для String .
Показать ещё 1 комментарий
Теги:
apiclient

1 ответ

0

Как упоминалось в комментариях, вы печатаете описание своего массива байтов, а не содержимое:

Заменить:

System.out.println("hash :" + hash);

С:

System.out.println("hash: " + new String(hash, StandardCharsets.UTF_8));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню