मैंने इसका जवाब देखने के लिए चारों ओर देखा है, लेकिन मुझे लगता है कि यह आपके लिए ऐसा सॉफ़्टवेयर ढूंढने में सक्षम है। क्या किसी को पता है कि पाइथन में ऐसा करने के बारे में कैसे जाना है?एक धार फ़ाइल से SHA1 हैश निकालें
उत्तर
मैं अजगर कोड का एक टुकड़ा है कि डाउनलोड की गई फ़ाइलें क्या एक धार फ़ाइल में है के खिलाफ की हैश की पुष्टि करता है लिखा था। मान लीजिए कि आप भ्रष्टाचार के लिए डाउनलोड देखना चाहते हैं, आपको यह उपयोगी लगेगा।
इसका उपयोग करने के लिए आपको bencode package की आवश्यकता है। बेनकोड .torrent फ़ाइलों में इस्तेमाल serialization प्रारूप है। यह जेएसओएन की तरह कुछ हद तक मार्शल सूचियों, शब्दकोशों, तारों और संख्याओं को कर सकता है।
कोड हैश info['pieces']
स्ट्रिंग में निहित लेता है:
torrent_file = open(sys.argv[1], "rb")
metainfo = bencode.bdecode(torrent_file.read())
info = metainfo['info']
pieces = StringIO.StringIO(info['pieces'])
कि स्ट्रिंग 20 बाइट हैश का एक उत्तराधिकार (प्रत्येक टुकड़ा के लिए एक) शामिल हैं। इन हैंशों की तब ऑन-डिस्क फ़ाइल के टुकड़ों के हैश की तुलना की जाती है।
इस कोड के केवल जटिल हिस्सा बहु फ़ाइल टोरेंट से निपटने है, क्योंकि एक भी धार टुकड़ा एक से अधिक फ़ाइल (आंतरिक BitTorrent एक भी सन्निहित फ़ाइल के रूप में बहु फ़ाइल डाउनलोड व्यवहार करता है) अवधि कर सकते हैं। मैं जनरेटर फ़ंक्शन pieces_generator()
का उपयोग उस सार को दूर करने के लिए कर रहा हूं।
अधिक जानकारी में इसे समझने के लिए आप BitTorrent spec पढ़ना चाहेंगे।
पूर्ण bellow कोड:
import sys, os, hashlib, StringIO, bencode
def pieces_generator(info):
"""Yield pieces from download file(s)."""
piece_length = info['piece length']
if 'files' in info: # yield pieces from a multi-file torrent
piece = ""
for file_info in info['files']:
path = os.sep.join([info['name']] + file_info['path'])
print path
sfile = open(path.decode('UTF-8'), "rb")
while True:
piece += sfile.read(piece_length-len(piece))
if len(piece) != piece_length:
sfile.close()
break
yield piece
piece = ""
if piece != "":
yield piece
else: # yield pieces from a single file torrent
path = info['name']
print path
sfile = open(path.decode('UTF-8'), "rb")
while True:
piece = sfile.read(piece_length)
if not piece:
sfile.close()
return
yield piece
def corruption_failure():
"""Display error message and exit"""
print("download corrupted")
exit(1)
def main():
# Open torrent file
torrent_file = open(sys.argv[1], "rb")
metainfo = bencode.bdecode(torrent_file.read())
info = metainfo['info']
pieces = StringIO.StringIO(info['pieces'])
# Iterate through pieces
for piece in pieces_generator(info):
# Compare piece hash with expected hash
piece_hash = hashlib.sha1(piece).digest()
if (piece_hash != pieces.read(20)):
corruption_failure()
# ensure we've read all pieces
if pieces.read():
corruption_failure()
if __name__ == "__main__":
main()
यह नहीं पता कि क्या ओपी की समस्या हल हो गई है, लेकिन यह निश्चित रूप से मेरा हल हो गया है (एक बार जब मैं बेनकोड पैकेज की टूटी हुई: http://stackoverflow.com/questions/2693963/importing-bittorrent-bencode-module)। धन्यवाद! –
मैं हमेशा ऐसा टूल चाहता था, और यह लिखने के लिए पुराने आधिकारिक पायथन क्लाइंट में खोदने वाला था। धन्यवाद!! – netvope
this के अनुसार, आप डेटा है कि लग रहा है के भाग के लिए खोज के द्वारा फ़ाइलों के md5sums को खोजने के लिए सक्षम होना चाहिए की तरह:
d[...]6:md5sum32:[hash is here][...]e
(एसएचए spec का हिस्सा नहीं है)
बस आपके द्वारा लिंक किए गए पृष्ठ पर SHA की खोज करें, आप देखेंगे कि इसका व्यापक रूप से उपयोग किया जाता है। यह भी उद्धरण दें: 'md5sum: (वैकल्पिक) 32-वर्ण हेक्स [...] इसका उपयोग बिटटोरेंट द्वारा बिल्कुल नहीं किया जाता है, लेकिन इसमें कुछ प्रोग्रामों द्वारा शामिल किया गया है' –
आह मैं देखता हूं, इसलिए कुछ 'डी [... ] 9: info_hash [लंबाई]: [SHA हैश] e' –
मुझे डर नहीं है। जैसा कि मैंने प्रश्न टिप्पणी में उल्लेख किया है कि फाइलों के लिए कोई SHA1 हैश नहीं है लेकिन प्रत्येक छोटी फ़ाइल के टुकड़े के लिए। टुकड़े हैंश उपयोगी हैं क्योंकि उन्हें डाउनलोड प्रक्रिया में जल्दी से सत्यापित किया जा सकता है। जैसे ही आपके पास एक वैध टुकड़ा है, आप इसे अन्य सहकर्मियों के साथ साझा कर सकते हैं ... उसने कहा कि आपके एमडी 5 समाधान में सरल होने का लाभ है। यह सभी। टोरेंट फ़ाइलों में उपलब्ध होने की गारंटी नहीं है। –
यहां कैसे Iv ई निकाले धार फ़ाइल से हैश मान:
#!/usr/bin/python
import sys, os, hashlib, StringIO
import bencode
def main():
# Open torrent file
torrent_file = open(sys.argv[1], "rb")
metainfo = bencode.bdecode(torrent_file.read())
info = metainfo['info']
print hashlib.sha1(bencode.bencode(info)).hexdigest()
if __name__ == "__main__":
main()
यह चल आदेश के रूप में ही है:
transmissioncli -i test.torrent 2>/dev/null | grep "^hash:" | awk '{print $2}'
आशा है, यह मदद करता है :)
जो आपको देता है वह * धार की जानकारी हैश * है। –
+1 क्योंकि यह वही है जब मैं "टोरेंट फ़ाइल से SHA1 हैश निकालने" के बारे में एक प्रश्न पर गया था। – sjy
कोड का अच्छा छोटा टुकड़ा, बेनकोड डेबियन/उबंटू डिस्ट में नहीं है, इसलिए आपको इसे इंस्टॉल करने के लिए _pip करना होगा, या _python-bzrlib_ से 'bzrlib.bencode' मॉड्यूल का उपयोग करना आसान लगता है। – marcz
- 1. एक धार फ़ाइल को पार्स करना - हैश जानकारी। (Erlang)
- 2. क्रिप्टोग्राफिक हैश "abc" के SHA1 हैश मेथेमेटिका
- 3. बेस 64 एक sha1/sha256 हैश क्यों?
- 4. एचएमसी SHA1 हैश - सी # रूबी
- 5. एक धार से फाइलसेट को पढ़ना
- 6. मैं एक फाइल पर SHA1 हैश कैसे करूं?
- 7. Convert base64'd हेक्स के लिए SHA1 हैश हैश
- 8. फ़ाइल से निकालें
- 9. Git एक SHA1
- 10. आप एक धार फ़ाइल सूचकांक कैसे बनाते हैं?
- 11. tar.gz से एक फ़ाइल निकालें, डिस्क
- 12. संशोधित प्रतिबद्धता से फ़ाइल निकालें
- 13. गिट "खराब sha1 फ़ाइल" त्रुटि
- 14. plupload कतार से फ़ाइल निकालें?
- 15. PHP में सरल धार प्रणाली?
- 16. वर्कस्पेस से हटाए बिना पर्सफोर्स नियंत्रण से एक फ़ाइल निकालें?
- 17. एक धार के लिए स्क्रैप यूआरएल की गणना कैसे करें
- 18. फ़ाइल फ़ाइल डिस्क्रिप्टर से फ़ाइल फ़ाइल निकालें या FILE *
- 19. सक्रिय निर्देशिका पासवर्ड हैश को SHA1 मान पर सेट करें?
- 20. मुझे बूस्ट SHA1 हैश तक कैसे पहुंचाया जाना चाहिए?
- 21. Git टैग सूची को प्रदर्शित SHA1 प्रतिबद्ध हैश
- 22. मैं रूबी में SHA1 हैश कैसे बना सकता हूं?
- 23. गिट पुल त्रुटि: अस्थायी sha1 फ़ाइल नाम
- 24. स्क्रिप्ट उनके फ़ाइल नाम के sha1() हैश का उपयोग करके फ़ाइलों का नाम बदलने के लिए
- 25. रेल में SHA1 हैशिंग
- 26. गुंजिप/फ़ाइल को "भाग से भाग" निकालें
- 27. टेक्स्ट फ़ाइल से डुप्लिकेट लाइन्स निकालें?
- 28. फ़ाइल से xml तत्व को कैसे निकालें?
- 29. बैच फ़ाइल इनपुट से ट्रेलिंग स्लैश निकालें
- 30. एपीके फ़ाइल से ऐप आइकन निकालें
एक धार फ़ाइल भंडार प्रत्येक * टुकड़े की SHA1 * साझा फ़ाइलों और धार मेटाडाटा के SHA1 * (मेटाइन्फो हैश) *। आप वास्तव में कौन सा हैश चाहते हैं? –
यह प्रत्येक टुकड़े के लिए हैश होगा। क्या फ़ाइल में त्रुटियों की जांच करने के लिए पूर्ण फ़ाइल के लिए हैश भी नहीं है? –
कुछ .torrent फ़ाइलों में प्रत्येक फ़ाइल का md5 हैश शामिल है लेकिन यह फ़ाइल प्रारूप में एक वैकल्पिक एक्सटेंशन है। पाठ्यक्रमों की वैधता की जांच करने के लिए टुकड़े हैश का उपयोग किया जा सकता है। आप बस जांचें कि क्या सभी टुकड़े हैं और यदि उनके पास सही हैश है। –