что такое keyed-HMAC (код аутентификации хэш-сообщения)

#java #web-services #restful-authentication

#java #веб-сервисы #restful-аутентификация

Вопрос:

что такое keyed-HMAC (код аутентификации хэш-сообщения)? И как написать HMAC в веб-службе, используя Java?

Комментарии:

1. Что касается первой части вашего вопроса, constult en.wikipedia.org/wiki/Message_authentication_code

Ответ №1:

HMAC — это дайджест, используемый для проверки подлинности сообщения. В отличие, скажем, от подписи md5, она генерируется с использованием секретного ключа, известного только вам и принимающей стороне, так что подделать его третьей стороной будет невозможно.

Чтобы сгенерировать его, вам нужно будет использовать некоторые классы java.security. Попробуйте это:

 public byte[] generateHMac(String secretKey, String data, String algorithm /* e.g. "HmacSHA256" */) {

    SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), algorithm);

    try {
        Mac mac = Mac.getInstance(algorithm);
        mac.init(signingKey);

        return mac.doFinal(data.getBytes());
    }
    catch(InvalidKeyException e) {
        throw new IllegalArgumentException("invalid secret key provided (key not printed for security reasons!)");
    }
    catch(NoSuchAlgorithmException e) {
        throw new IllegalStateException("the system doesn't support algorithm "   algorithm, e);
    }
}