我盲目地遵循了 OWASP 关于在 java 中生成哈希的建议(见这里),我不确定我是否正确地完成了它。具体来说,我不确定 的目的和效果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 确实会改变......