2012-12-07 11 views
6

Bu, MessageDigest nesnesinin iç durumunu nasıl kaydedebilir? Bir veritabanına kaydetmek istiyorum, bu yüzden sadece String, int, byte[] gibi ilkel verileri kullanmak zorundayım.MessageDigest iç durumunu veritabanına nasıl kaydedebilirim?

Elde etmeye çalıştığım parçalanmış bir dosyayı (uzun bir süre boyunca) alabilmek, tüm parçaları veritabanında saklamak ve son parçayı aldıktan sonra dosyanın SHA512 özetini elde etmeden doğrulamaktır. Veritabanına önceden kaydedilmiş tüm verileri geri.

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

cevap

1

Eğer dize (XML formatı) için nesne seri ve geri geri dönebilirler:

Yani temelde böyle bir şey istiyorum.

kontrol: 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()); 
    } 
} 
+0

aslında iç SHA durumunu kaydeder mi? Bu, 512 bit saf durum artı akım giriş uzunluğu artı mevcut eksik IIRC bloğu olacaktır. Böylece genel durumda kabaca 200 bayt. –

+0

Geç cevap için özür dilerim;) Ancak bunun, önerilen XStream teknolojisini kullanarak yapılabildiğini onaylayabilirim. Oluşturulan xml'nin @qarma boyutu kabaca 12kB'dir, ancak birkaç MB yığınında dosya gelmesi durumunda yine de daha iyi bir çözüm olabilir. – MJar