有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

是否可以保存MessageDigest对象的内部状态,如果可以,如何保存?我想将其保存在数据库中,因此只能使用诸如Stringintbyte[]之类的基本数据

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

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

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

共 (1) 个答案

  1. # 1 楼答案

    可以将对象序列化为字符串(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());
        }
    }