保存MessageDigest对象的内部状态是否可能,如果可行?我想将它保存在数据库中,所以必须使用唯一的原始数据,如String,int,byte[].
我想要实现的是能够接收一个碎片文件(在很长一段时间内),保存数据库中的所有片段,并在收到最后一个片段后验证文件的SHA512摘要而不取回所有数据以前保存在数据库中.
所以基本上我想要这样的东西:
MessageDigest md = MessageDigest.getInstance("SHA-512");
// restore previous internal state of md
md.update(dataSegment);
// save internal md state
Run Code Online (Sandbox Code Playgroud)
您可以将对象序列化为字符串(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());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |