java - 在 JUnit 中生成 HmacSHA256 签名

标签 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 尝试过,结果相同。

最佳答案

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

关于java - 在 JUnit 中生成 HmacSHA256 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442875/

相关文章:

java - 如何从用户输入错误的地方重复输入?

java - Eclipse 数据工具项目 - SQL 查询解析器

java - 检测无限循环?

java - 使用junit测试从文本和二进制文件读取以及写入文本和二进制文件

hash - 密码哈希函数如何设计?

java - 在模型类中使用 awt 类

junit - 如何在 Selenium 2 中编辑文本字段?

java - JUnit 参数化数据注入(inject)

javascript - crypto模块中6个随机字节可以产生的最大值是多少?

delphi - BCryptEncrypt 在 AES-GCM 上返回 STATUS_INVALID_PARAMETER