我一直在盲目地遵循OWASP关于java中的散列生成的建议(see here),并且我不确定我是否做得正确。具体而言,我不确定MessageDigest.reset()
的目的和效果,因此何时以及如何使用它。什么时候使用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会改变...
可能重复[在使用它之前是否需要调用MessageDigest.reset()?](http://stackoverflow.com/questions/7546549/do-i-need-to-call-messagedigest-reset-before -using-it) – durron597