8

MessageDigest オブジェクトの内部状態を保存する方法はありますか? データベースに保存したいのでString、 、int、などのプリミティブ データのみを使用する必要がありますbyte[]

私が達成しようとしているのは、フラグメント化されたファイルを(長期間)受信し、すべてのフラグメントをデータベースに保存し、最後のフラグメントを受信した後、すべてのデータを取り戻すことなくファイルの SHA512 ダイジェストを検証できるようにすることです以前にデータベースに保存されました。

だから基本的に私はこのようなものが欲しい:

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

1 に答える 1

0

オブジェクトを文字列 (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());
    }
}
于 2012-12-28T00:42:52.040 に答える