बर्कले डीबी से डेटा डिकोड करने में समस्या आ रही है। मैंने db4.8_dump या db4.8_dump -p के साथ डेटा डंप किया है और python.decode() का उपयोग करके डिकोडिंग किया है

तो, हेक्स कोडिंग में db4.8_dump के बाद डेटा कैसा दिखता है:

036b65794104053ca761cf8062cfff09a2ec355a2694da4eed0677b510cf0c43a0d8486694e9966f2133302c5aa51664e9003b04cfa3847ce20de92040844b9b05aa15b5ab58

और -p स्विच db4.8_dump -p के साथ समान डेटा:

\03keyA\04\05<\a7a\cf\80b\cf\ff\09\a2\ec5Z&\94\daN\ed\06w\b5\10\cf\0cC\a0\d8Hf\94\e9\96o!30,Z\a5\16d\e9\00;\04\cf\a3\84|\e2\0d\e9 @\84K\9b\05\aa\15\b5\abX

मैं इसे उसकी तरह डीकोड कर सकता हूं, लेकिन फिर भी अपठनीय:

mbstr = b'036b65794104053ca761cf8062cfff09a2ec355a2694da4eed0677b510cf0c43a0d8486694e9966f2133302c5aa51664e9003b04cfa3847ce20de92040844b9b05aa15b5ab58'

mbstr.decode('hex')
'\x03keyA\x04\x05<\xa7a\xcf\x80b\xcf\xff\t\xa2\xec5Z&\x94\xdaN\xed\x06w\xb5\x10\xcf\x0cC\xa0\xd8Hf\x94\xe9\x96o!30,Z\xa5\x16d\xe9\x00;\x04\xcf\xa3\x84|\xe2\r\xe9 @\x84K\x9b\x05\xaa\x15\xb5\xabX'

प्रति दस्तावेज़ https://docs.oracle.com/cd/E17275_01/ html/programmer_reference/dumpload_format.html

यदि बैकस्लैश वर्ण किसी अन्य वर्ण से पहले आता है, तो अगले दो वर्णों की व्याख्या एकल वर्ण के हेक्साडेसिमल विनिर्देश के रूप में की जानी चाहिए; उदाहरण के लिए, \0a ASCII कैरेक्टर सेट में एक न्यूलाइन कैरेक्टर है। लेकिन यह मेरे लिए काम नहीं करता है। अर्थात।

>>> mbstr.decode('hex')
'\x03keyA\x04\x05<\xa7a\xcf\x80b\xcf\xff\t\xa2\xec5Z&\x94\xdaN\xed\x06w\xb5\x10\xcf\x0cC\xa0\xd8Hf\x94\xe9\x96o!30,Z\xa5\x16d\xe9\x00;\x04\xcf\xa3\x84|\xe2\r\xe9 @\x84K\x9b\x05\xaa\x15\xb5\xabX'
>>> mbstr.decode('hex').decode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 8: ordinal not in range(128)

मैं डेटा को पठनीय स्ट्रिंग प्रारूप में कैसे परिवर्तित कर सकता हूं? शुक्रिया

1
Maxya 4 पद 2019, 18:43

1 उत्तर

बर्कले डीबी कुंजी और डेटा अक्सर तार नहीं होते हैं। दरअसल, मुझे ऐसा समय याद नहीं है जब मैंने कभी चाबियों के लिए स्ट्रिंग्स का इस्तेमाल किया हो। डेटा, निश्चित। कभी - कभी। लेकिन कुंजी तुलना फ़ंक्शन इतना महत्वपूर्ण प्रदर्शन है, यह लगभग हमेशा बाइनरी में कुंजियों का प्रतिनिधित्व करने के लिए समझ में आता है, जैसे कि यह एक पैक सी संरचना में बैठेगा।

बर्कले डीबी में संग्रहीत डेटा को समझने के लिए, आपको उस एप्लिकेशन के लिए स्रोत कोड की आवश्यकता है जो इसे पॉप्युलेट करता है।

0
Mike Andrews 5 पद 2019, 16:51
उत्तर के लिए धन्यवाद, अब और अधिक समझ में आता है। डेटा मेरे पुराने wallet.dat से है, मैंने हाल ही में डेवलपर्स से प्रश्न पूछा है और पूर्ण उत्तर नहीं मिला है या बस इसका पता लगाने में असमर्थ है। github.com/bitcoin/bitcoin/issues/881#issuecomment-561364689 आवेदन का स्रोत कोड यहां है - github.com/bitcoin /bitcoin/blob/master/src/wallet/walletdb.cpp धन्यवाद
 – 
Maxya
6 पद 2019, 00:12