Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MessageDigest.reset()之前是否需要调用它?_Java_Hash_Cryptography_Owasp - Fatal编程技术网

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

问题很简单:我应该在什么时候调用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; 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()文档,所以最后我弄糊涂了。