gpt4 book ai didi

java - 如何将 MessageDigest 内部状态保存到数据库中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:18 26 4
gpt4 key购买 nike

是否有可能保存 MessageDigest 对象的内部状态?我想将它保存在数据库中,所以只能使用原始数据,如 Stringintbyte[]

我想要实现的是能够接收一个碎片文件(在很长一段时间内),将所有碎片保存在数据库中,并在收到最后一个碎片后验证文件的 SHA512 摘要而无需返回之前保存在数据库中的所有数据。

所以基本上我想要这样的东西:

MessageDigest md = MessageDigest.getInstance("SHA-512");
// restore previous internal state of md
md.update(dataSegment);
// save internal md state

最佳答案

您可以将对象序列化为字符串(XML 格式)并将其返回。

检查: http://x-stream.github.io/tutorial.html

public class DigestTest {

private static final byte[] TEST_DATA = "Some test data for digest computations".getBytes();

@Test
public void shouldStoreAndRestoreDigest() throws Exception {
final MessageDigest referenceDigest = MessageDigest.getInstance("SHA-512");
MessageDigest testDigest = MessageDigest.getInstance("SHA-512");
referenceDigest.update(TEST_DATA);
testDigest.update(TEST_DATA);
// store state
final XStream xs = new XStream(new StaxDriver());
xs.alias("md", MessageDigest.class);
final String serializedMd = xs.toXML(testDigest);
System.out.println(serializedMd);
// restore state
testDigest = (MessageDigest)xs.fromXML(serializedMd);
// ---
referenceDigest.update(TEST_DATA);
testDigest.update(TEST_DATA);
Assert.assertArrayEquals(referenceDigest.digest(), testDigest.digest());
}
}

关于java - 如何将 MessageDigest 内部状态保存到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com