我正在尝试在JUnit测试中为Amazon AWS签署消息,但遇到了问题。 这是我正在使用的代码:
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,结果也是一样的。