python पायथन में एक फाइल हैशिंग




hash md5 (4)

मैं पाइथन को ईओएफ को पढ़ना चाहता हूं ताकि मैं एक उचित हैश प्राप्त कर सकूं, चाहे वह sha1 या md5 हो। कृपया मदद करे। यह है, जो कि अभी तक मेरे पास है:

import hashlib

inputFile = raw_input("Enter the name of the file:")
openedFile = open(inputFile)
readFile = openedFile.read()

md5Hash = hashlib.md5(readFile)
md5Hashed = md5Hash.hexdigest()

sha1Hash = hashlib.sha1(readFile)
sha1Hashed = sha1Hash.hexdigest()

print "File Name: %s" % inputFile
print "MD5: %r" % md5Hashed
print "SHA1: %r" % sha1Hashed

फ़ाइल के हैश मान के सही और कुशल गणना के लिए (पायथन 3 में):

  • चरित्र एन्कोडिंग और लाइन-एंडिंग रूपांतरण समस्याओं से बचने के लिए फ़ाइल को बाइनरी मोड में खोलें (यानी 'b' m 'b' को फ़ाइल मोड में जोड़ें)।
  • स्मृति में पूरी फ़ाइल को न पढ़ें, क्योंकि यह स्मृति की बर्बादी है। इसके बजाए, अनुक्रमिक रूप से ब्लॉक द्वारा ब्लॉक को पढ़ें और प्रत्येक ब्लॉक के लिए हैश अपडेट करें।
  • डबल बफरिंग को हटा दें, यानी buffered IO का उपयोग न करें, क्योंकि हम पहले से ही इष्टतम ब्लॉक आकार का उपयोग करते हैं।

उदाहरण:

import hashlib

def sha256sum(filename):
    h = hashlib.sha256()
    with open(filename, 'rb', buffering=0) as f:
        for b in iter(lambda : f.read(128*1024), b''):
            h.update(b)
    return h.hexdigest()

import hashlib
user = input("Enter ")
h = hashlib.md5(user.encode())
h2 = h.hexdigest()
with open("encrypted.txt","w") as e:
    print(h2,file=e)


with open("encrypted.txt","r") as e:
    p = e.readline().strip()
    print(p)

मैंने एक मॉड्यूल प्रोग्राम किया है जो विभिन्न एल्गोरिदम के साथ हैश बड़ी फाइलों में सक्षम है।

pip3 install py_essentials

इस तरह के मॉड्यूल का प्रयोग करें:

from py_essentials import hashing as hs
hash = hs.fileChecksum("path/to/the/file.txt", "sha256")

टीएल; डीआर उपयोग बफर का उपयोग बहुत मेमोरी का उपयोग नहीं करने के लिए।

हम आपकी समस्या के क्रूक्स पर आते हैं, मुझे विश्वास है, जब हम बहुत बड़ी फाइलों के साथ काम करने के स्मृति प्रभावों पर विचार करते हैं। हम नहीं चाहते हैं कि इस बुरे लड़के को 2 गिगाबाइट फ़ाइल के लिए 2 pasztorpisti रैम के माध्यम से pasztorpisti , जैसे कि pasztorpisti बताते हैं, हमें उन बड़ी फ़ाइलों के साथ सौदा करना होगा!

import sys
import hashlib

# BUF_SIZE is totally arbitrary, change for your app!
BUF_SIZE = 65536  # lets read stuff in 64kb chunks!

md5 = hashlib.md5()
sha1 = hashlib.sha1()

with open(sys.argv[1], 'rb') as f:
    while True:
        data = f.read(BUF_SIZE)
        if not data:
            break
        md5.update(data)
        sha1.update(data)

print("MD5: {0}".format(md5.hexdigest()))
print("SHA1: {0}".format(sha1.hexdigest()))

हमने जो किया है वह है कि हम 64kb भाग में इस बुरे लड़के के हमारे हैंश अपडेट कर रहे हैं क्योंकि हम हैशिलिब के आसान डेन्डी अपडेट विधि के साथ जाते हैं। इस तरह हम 2 जीबी की तुलना में बहुत कम मेमोरी का उपयोग करते हैं, यह सब एक बार में हैश को ले जाएगा!

आप इसका परीक्षण कर सकते हैं:

$ mkfile 2g bigfile
$ python hashes.py bigfile
MD5: a981130cf2b7e09f4686dc273cf7187e
SHA1: 91d50642dd930e9542c39d36f0516d45f4e1af0d
$ md5 bigfile
MD5 (bigfile) = a981130cf2b7e09f4686dc273cf7187e
$ shasum bigfile
91d50642dd930e9542c39d36f0516d45f4e1af0d  bigfile

उम्मीद है की वो मदद करदे!

इसके अलावा यह सब दाएं हाथ पर जुड़े प्रश्न में उल्लिखित है: पाइथन में बड़ी फ़ाइलों के एमडी 5 हैश प्राप्त करें

परिशिष्ट!

आम तौर पर जब अजगर लिखते हैं तो यह pep-8 के बाद आदत में मदद करता है। उदाहरण के लिए, अजगर चर में आमतौर पर अंडरस्कोर अलग-अलग नहीं होते हैं। लेकिन यह सिर्फ शैली है और कोई भी वास्तव में उन चीजों की परवाह नहीं करता है जिन्हें लोगों को बुरी शैली पढ़नी है ... जो आप अब से इस कोड साल पढ़ रहे हैं।





hashlib