19

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でも試してみましたが、同じ結果が得られました.

4

1 に答える 1

57

すみません、全部入れてませんでした。上記のコードは、junit と powermockito を使用してテストされました。しかし、powermockito は javax.crypto クラスを拡張できないため@PowerMockIgnore("javax.crypto.*")、junit に追加する必要がありました。

于 2011-09-16T19:09:35.597 に答える