Подтвердить что ты не робот

Создание сигнатуры HmacSHA256 в JUnit

Я пытаюсь подписать свое сообщение Amazon AWS (внутри теста JUnit), но я столкнулся с проблемой. Вот код, который я использую:

String secretAccessKey = "secret1234678901";        
SecretKeySpec keySpec = new SecretKeySpec(secretAccessKey.getBytes(UTF-8), "HmacSHA256");
Mac mac = Mac.getInstance(this.MAC_ALGO);
mac.init(keySpec); // here it breaks
byte[] encoded = mac.doFinal(
    request.toString().getBytes(this.CHARSET));
return Base64.encodeBase64URLSafeString(encoded);

В строке, помеченной (mac.init(...)), исключение java исключает:

java.lang.ClassCastException: com.sun.crypto.provider.HmacSHA1 cannot be cast to javax.crypto.MacSpi
    at javax.crypto.Mac.a(DashoA13*..)
    at javax.crypto.Mac.init(DashoA13*..)

Вы знаете, почему это происходит? Все коды, которые я видел в сети, выглядят почти так же, как и я, я также пытался использовать HmacSHA1 с такими же результатами.

4b9b3361

Ответ 1

Извините, я не добавил все. Приведенный выше код был протестирован с использованием junit и powermockito. Но powermockito не может улучшить классы javax.crypto, поэтому мне пришлось добавить @PowerMockIgnore("javax.crypto.*") в junit.