java之何时使用 MessageDigest.reset()
pander-it
阅读:29
2025-01-19 22:14:33
评论:0
我盲目地遵循了 OWASP 关于在 java 中生成哈希的建议 (see here),我不确定我是否正确地做到了。具体来说,我不确定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 确实会改变......
请您参考如下方法:
您只需调用reset
如果您已经使用过 MessageDigest
的实例. reset
在这里调用以清除所有以前的设置。MessageDigest.getInstance
是 factory method而不是 singleton所以有很大的开销。
来自 MessageDigest.getInstance :
A new MessageDigest object encapsulating the MessageDigestSpi implementation from the first Provider that supports the specified algorithm is returned.
所以最好重用并避免调用
MessageDigest.getInstance
的开销再次。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。