我一直在盲目地遵循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