在JUnit中生成HmacSHA256签名

时间:2011-09-16 09:47:04

标签: java junit cryptography powermock cryptoapi

我正在尝试将我的消息签名到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,结果相同。

1 个答案:

答案 0 :(得分:39)

抱歉,我没有添加所有内容。上面的代码使用junit和powermockito进行了测试。但是powermockito无法增强javax.crypto类,因此我必须将@PowerMockIgnore("javax.crypto.*")添加到junit。