MessageDigest.update(byte[])是做什么的?

11

这具体是做什么的?我试着查找了一下但没有找到任何信息。

问这个的原因是因为我想将一个SALT byte[]合并到一个值中,然后对其进行哈希处理。所以应该像这样做(伪代码):

MessageDigest.update(SALT);
MessageDigest.update(value);
digestValue = MessageDigest.digest();
// Where SALT, value and digestValue are array bytes, byte[]

这样做会将SALTvalue都添加到最终的摘要中吗?还是应该将这两个变量合并成一个,然后再进行一次update操作?

我在任何文档中都找不到答案,希望能得到澄清。

谢谢,祝好。


1
你的代码看起来很好。这是创建值的盐摘要的正确方法。 - Qwerky
你看过API文档了吗? - Jesper
@Qwerky 谢谢您的确认 :) - LuckyMe
@Jesper 很不幸,我找到的那份文档和其他所有文档都没有解释得很清楚。 - LuckyMe
1个回答

15

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]

感谢详细的解释,接下来的问题是:update做的就是把数组连接起来,除此之外没有其他特殊操作吗? - LuckyMe
当我们将一个数组传递给MessageDigest时,它会简单地迭代这个数组并通过字节更新摘要。 - Evgeniy Dorofeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接