【问题标题】:Testing HmacSHA256 signature测试 HmacSHA256 签名
【发布时间】:2013-04-26 08:34:36
【问题描述】:

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

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

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

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

// Hex encoded
a5418172bb54bf71f3ec28d1c9f34c48da17007eac4d0ca9e2f8ab54b91603e8
773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe

【问题讨论】:

    标签: java hash cryptography sha


    【解决方案1】:

    我无法重现您的问题。对我来说,以下 SSCCE 可以正常工作:

    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

    您的显示或比较代码可能有错误?

    【讨论】:

    • 谢谢!该代码确实有效:) 我没有发布我的实际代码,因为问题代码是由 Junit 测试和我的实现代码组合而成的。我找到了为什么它不起作用!错误来自我创建密钥时字符串和字节数组之间的转换。
    • @heffaklump 这就是为什么我们总是建议通过 SSCCE 发布问题。那么问题的可重复性就毫无疑问了。很高兴你得到了修复。
    • 我相信 Arrays.equals 容易受到定时攻击,见codahale.com/a-lesson-in-timing-attacks
    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2016-05-15
    • 2021-03-10
    • 2020-08-03
    相关资源
    最近更新 更多