2012-12-07 10 views
6

क्या यह संभव है, और अगर संदेश की सबसे पुरानी स्थिति को सहेजने के लिए, तो कैसे? मैं इसे डेटाबेस में सहेजना चाहता हूं, इसलिए String, int, byte[] जैसे केवल आदिम डेटा का उपयोग करना होगा।मैं संदेशडिगेस्ट आंतरिक स्थिति को डेटाबेस में कैसे सहेज सकता हूं?

जो मैं प्राप्त करने का प्रयास कर रहा हूं वह एक खंडित फ़ाइल (लंबे समय के दौरान) प्राप्त करने में सक्षम होना है, डेटाबेस में सभी टुकड़ों को सहेजने के बाद, और अंतिम खंड प्राप्त करने के बाद फ़ाइल के SHA512 पाचन को सत्यापित किए बिना सत्यापित करें पहले डेटाबेस में सहेजे गए सभी डेटा वापस।

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

उत्तर

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

यह वास्तव में आंतरिक SHA राज्य को बचाने करता है? यह शुद्ध राज्य प्लस वर्तमान इनपुट लंबाई और वर्तमान अपूर्ण ब्लॉक आईआईआरसी के 512 बिट्स होगा। इस प्रकार सामान्य मामले में लगभग 200 बाइट्स। –

+0

देर से प्रतिक्रिया के लिए खेद है;) लेकिन मैं पुष्टि कर सकता हूं कि प्रस्तावित एक्सस्ट्रीम तकनीक का उपयोग करके यह करने योग्य है। @qarma जेनरेटेड एक्सएमएल लगभग 12kb आकार में है, लेकिन यह अभी भी कुछ एमबी भाग में आने वाली फ़ाइलों के मामले में एक बेहतर समाधान हो सकता है। – MJar

संबंधित मुद्दे