这到底是做什么的?我试着查一下但没找到任何东西。
询问的原因是我想将SALT byte[]
合并到一个经过哈希处理的值中。所以它应该像这样(伪代码):
MessageDigest.update(SALT);
MessageDigest.update(value);
digestValue = MessageDigest.digest();
// Where SALT, value and digestValue are array bytes, byte[]
这是否会将SALT
和value
添加到最终摘要中,还是应该将两个变量合并为一个,然后update
将其合并一次?
我无法在任何文档中找到答案,任何澄清都将不胜感激。
谢谢,干杯。
答案 0 :(得分:7)
MessageDigest
是有状态的,MessageDigest.update(byte[] input)
调用累积摘要更新,直到我们调用MessageDigest.digest
。运行此测试以确保:
MessageDigest md1 = MessageDigest.getInstance("MD5");
md1.update(new byte[] {1, 2});
md1.update(new byte[] {3, 4});
System.out.println(Arrays.toString(md1.digest()));
MessageDigest md2 = MessageDigest.getInstance("MD5");
md2.update(new byte[] {1, 2, 3, 4});
System.out.println(Arrays.toString(md2.digest()));
输出
[8, -42, -64, 90, 33, 81, 42, 121, -95, -33, -21, -99, 42, -113, 38, 47]
[8, -42, -64, 90, 33, 81, 42, 121, -95, -33, -21, -99, 42, -113, 38, 47]