Тестирование подписи HmacSHA256


person heffaklump    schedule 26.04.2013    source источник


Ответы (1)


Я не могу воспроизвести вашу проблему. Для меня отлично работает следующий SSCCE:

public static void main(String[] args) throws Exception {
  byte[] key = hexify("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  byte[] data = hexify("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
  byte[] correct = hexify("773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe");

  // Create digest
  SecretKey macKey = new SecretKeySpec(key, "HmacSHA256");
  Mac mac = Mac.getInstance("HmacSHA256");
  mac.init(macKey);
  byte[] digest = mac.doFinal(data);
  System.out.println(Arrays.equals(correct, digest));    
}

private static byte[] hexify(String string) {
  return DatatypeConverter.parseHexBinary(string);
}

Отпечатки: true

Возможно, ошибка в вашем дисплее или коде сравнения?

person Duncan Jones    schedule 26.04.2013
comment
Спасибо! Этот код действительно работает :) Я не публиковал свой фактический код, так как код вопроса был составлен из теста Junit и моего кода реализации. И я нашел, почему это не сработало! Ошибка возникает из-за преобразования между массивами строк и байтов, когда я создаю свой ключ. - person heffaklump; 26.04.2013
comment
@heffaklump Вот почему мы всегда рекомендуем публиковать вопросы с SSCCE. Тогда можно не сомневаться в воспроизводимости вопроса. Рад, что у вас есть исправление. - person Duncan Jones; 26.04.2013
comment
Я считаю, что Arrays.equals уязвим для атак по времени, см. codahale.com/a-lesson -временные атаки - person Sergey; 04.08.2018