java - 何时使用 MessageDigest.reset()

标签 java hash owasp message-digest

我盲目地遵循了 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/

    相关文章:

    java - 防止 Java/AMF 应用程序中的洪水/DOS 攻击

    java - 使用 Java HTTP URL 连接进行暴力破解

    java - 如何使用 OWASP 检测 Java 中的 XSS

    java - URLConnection 到 RSS feed 返回 null

    java - 在对象数组上设置监听器

    java.rmi.MarshalException : Failed to communicate

    security - GWT SafeHTML、XSS 和最佳实践

    php - 我是否正确使用了 PHP 的 crypt() 函数?

    hash - 布隆过滤器和 FM 草图的区别

    android - 在 android 上生成 1024 位哈希