Java 使用MessageDigest.reset()之前是否需要调用它?
问题很简单:我应该在什么时候调用java类MessageDigest上的reset()函数 问题主要来自,在代码示例中,它们确实:Java 使用MessageDigest.reset()之前是否需要调用它?,java,hash,cryptography,owasp,Java,Hash,Cryptography,Owasp,问题很简单:我应该在什么时候调用java类MessageDigest上的reset()函数 问题主要来自,在代码示例中,它们确实: MessageDigest digest = MessageDigest.getInstance("SHA-1"); digest.reset(); digest.update(salt); byte[] input = digest.digest(password.getBytes("UTF-8")); for (int i = 0
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
digest.update(salt);
byte[] input = digest.digest(password.getBytes("UTF-8"));
for (int i = 0; i < iterationNb; i++) {
digest.reset();
input = digest.digest(input);
}
然后,在循环中,它们执行以下操作:
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
digest.update(salt);
byte[] input = digest.digest(password.getBytes("UTF-8"));
for (int i = 0; i < iterationNb; i++) {
digest.reset();
input = digest.digest(input);
}
for(int i=0;i
现在,对我来说,似乎只有在摘要实例已经被更新调用“污染”之后才需要重置。因此,第一个样本中的一个似乎没有必要。如果有必要,是否表示MessageDigest.getInstance返回的实例不是线程安全的
reset()
是没有必要的。委员会:
MessageDigest对象开始初始化
另外,类文档中的示例不包括初始重置
这与线程安全无关,.reset()
的必要性只表明getInstance()
本身不进行初始化
在没有同步的情况下,您不应该使用来自多个线程的同一MessageDigest对象:只有当您知道部分的散列顺序时,散列才有意义,否则它只是一种幻想,不是完全确定的PRNG。TY,有意义。我看了太多谷歌参考文献,忘了重读类头和getInstance()文档,所以最后我弄糊涂了。