Java 何时使用MessageDigest.reset()
我盲目地遵循了OWASP关于java()中哈希生成的建议,我不确定我是否正确地完成了它。具体来说,我不确定Java 何时使用MessageDigest.reset(),java,hash,owasp,message-digest,Java,Hash,Owasp,Message Digest,我盲目地遵循了OWASP关于java()中哈希生成的建议,我不确定我是否正确地完成了它。具体来说,我不确定MessageDigest.reset()的用途和效果,因此也不确定何时以及如何使用它 我通过update()ing多次使用需要签名的不同值来“加载”我的salt和有效负载。我应该事先重置摘要吗?还是之后 为什么摘要在循环中是reset()(参见示例) 这是我的密码: MessageDigest md = MessageDigest.getInstance("SHA-256"); md.up
MessageDigest.reset()
的用途和效果,因此也不确定何时以及如何使用它
update()
ing多次使用需要签名的不同值来“加载”我的salt和有效负载。我应该事先重置摘要吗?还是之后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);
}
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
医学博士(salt);
md.update(有效载荷1);//有效载荷的第1部分
md.update(payload2);//有效载荷的第2部分
md.update(序列号);//有效载荷的第3部分
md.reset();
字节[]sig=md.digest();
对于(int i=0;i您只需调用reset
,如果您已经使用了MessageDigest
reset
的实例,就可以在此处调用该实例以清除所有以前的设置
MessageDigest.getInstance
是一个而不是一个so,附加了大量开销
发件人:
返回一个新的MessageDigest对象,该对象封装了来自支持指定算法的第一个提供程序的MessageDigestSpi实现
因此,最好重新使用并避免再次调用MessageDigest.getInstance
的开销。代码看起来很像我……也许我在这里读错了,但是saydigest()
隐式地重置了实例。因此,如果之前调用了update(),那么您应该调用reset()
和2)需要重新使用实例,但不需要update()
调用的结果
在您的情况下,我还认为您需要省略对reset()
的第一个调用。否则,您将失去盐和有效载荷带来的任何好处。在循环内调用reset()
是不必要的,但不应更改计算结果
希望能有所帮助。所以OWASP示例和我的代码是错误的,是吗?如果我总是得到一个新实例,我根本不需要重置reset
?我会使用reset&re-use:)@Hank-你并不总是得到一个新实例,因为。getInstance
在循环之外。在这里使用.reset
很好。谢谢,您的回答和对它们的思考(tm)完全回答了我的问题!完全同意,原始代码先关闭wrtreset()
call。感谢关于隐式重置的指针!可能重复的