在 JUnit 中生成 HmacSHA256 签名

发布于 2024-12-05 02:21:54 字数 766 浏览 1 评论 0原文

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

I'm trying to sign my message to Amazon AWS (inside JUnit test), but I encountered a problem.
Here's the code I'm using:

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);

In the line marked (mac.init(...)) java throws exception:

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*..)

Do you know why it happens? All the codes I've seen on the net look almost exactly like this, I also tried with HmacSHA1, with same results.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

好菇凉咱不稀罕他 2024-12-12 02:21:54

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

Sorry I didn't add everything. The code above was tested using junit and powermockito. But powermockito can't enhance javax.crypto classes so I had to add @PowerMockIgnore("javax.crypto.*") to the junit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文