gpt4 book ai didi

java - 何时使用 MessageDigest.reset()

转载 作者:行者123 更新时间:2023-12-01 12:28:17 32 4
gpt4 key购买 nike

我盲目地遵循了 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 - 何时使用 MessageDigest.reset(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802627/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com