首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试HmacSHA256签名

测试HmacSHA256签名
EN

Stack Overflow用户
提问于 2013-04-26 16:34:37
回答 1查看 4.1K关注 0票数 0

我正在用来自https://www.rfc-editor.org/rfc/rfc4231的测试向量测试我的Hmac。

但是在测试用例3上,“测试密钥和数据的组合长度大于64字节(= SHA-224和SHA-256的块大小)。”我得到的摘要与正确的摘要不同。

代码语言:javascript
复制
byte[] key = hexify("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
byte[] data = hexify("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
byte[] correct = hexify("773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe");

// Create digest
SecretKey macKey = new SecretKeySpec(key, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(macKey);
byte[] digest = mac.doFinal(data);

你知道为什么它们会变得不同吗?我错过了什么?我对此非常陌生。

代码语言:javascript
复制
// Hex encoded
a5418172bb54bf71f3ec28d1c9f34c48da17007eac4d0ca9e2f8ab54b91603e8
773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 16:41:09

我不能复制你的问题。对我来说,下面的SSCCE运行得很好:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
  byte[] key = hexify("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  byte[] data = hexify("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
  byte[] correct = hexify("773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe");

  // Create digest
  SecretKey macKey = new SecretKeySpec(key, "HmacSHA256");
  Mac mac = Mac.getInstance("HmacSHA256");
  mac.init(macKey);
  byte[] digest = mac.doFinal(data);
  System.out.println(Arrays.equals(correct, digest));    
}

private static byte[] hexify(String string) {
  return DatatypeConverter.parseHexBinary(string);
}

印刷品:true

可能是显示或比较代码中的错误?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16232040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档