java之何时使用 MessageDigest.reset()

pander-it 阅读:29 2025-01-19 22:14:33 评论:0

我盲目地遵循了 OWASP 关于在 java 中生成哈希的建议 (see here),我不确定我是否正确地做到了。具体来说,我不确定MessageDigest.reset() 的目的和效果。 ,因此何时以及如何使用它。

  • 我正在通过 update()“加载”我的盐和有效负载使用完全需要签名的不同值多次对摘要进行处理。我应该reset()事先的摘要?还是之后?
  • 为什么摘要是 reset()在循环内(参见示例)?

  • 这是我的代码:
    MessageDigest md = MessageDigest.getInstance("SHA-256"); 
    md.update(salt); 
    md.update(payload1);  // part 1 of payload 
    md.update(payload2);  // part 2 of payload 
    md.update(serialNumber);  // part 3 of payload 
    md.reset(); 
    byte[] sig = md.digest(); 
    for (int i=0; i<1000; i++) { 
      md.reset(); 
      sig = md.digest(sig); 
    } 
    

    我观察到的是签名保持不变,即使 serialNumber在改变。如果我省略了“reset()”调用,sig 确实会改变......

    请您参考如下方法:

    您只需调用reset如果您已经使用过 MessageDigest 的实例. reset在这里调用以清除所有以前的设置。
    MessageDigest.getInstancefactory method而不是 singleton所以有很大的开销。

    来自 MessageDigest.getInstance :

    A new MessageDigest object encapsulating the MessageDigestSpi implementation from the first Provider that supports the specified algorithm is returned.



    所以最好重用并避免调用 MessageDigest.getInstance 的开销再次。


    标签:java
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号