এটি দুঃখের বিষয় যে ওপেনসেল ইউটিলিটি একাধিক ডাইজেস্ট কমান্ড গ্রহণ করে না; আমার ধারণা একাধিক ফাইলে একই কমান্ডটি করা আরও সাধারণ ব্যবহারের ধরণ pattern এফডব্লিউআইডাব্লু, আমার সিস্টেমে ওপেনসেল ইউটিলিটির সংস্করণ (মেপিস 11) কেবল শ এবং শ 1 এর জন্য কেবল কমান্ড রয়েছে, অন্য কোনও শ রূপগুলি নয়। তবে আমার কাছে sha256sum নামে একটি প্রোগ্রাম রয়েছে, পাশাপাশি এমডি 5সাম।
এখানে একটি সাধারণ পাইথন প্রোগ্রাম, ডুয়াল_হ্যাশ.পি, এটি আপনার যা চায় তা করে। আমার মেশিনের জন্য 64k এর একটি ব্লক আকারটি সর্বোত্তম বলে মনে হচ্ছে (ওয়াইএমএমভি, 2 জি র্যামের সাথে ইন্টেল পেন্টিয়াম 4 2.00GHz)। ছোট ফাইলগুলির জন্য, এর গতি মোটামুটি একইভাবে md5sum এবং ধারাবাহিকভাবে sha256sum চলমান। তবে বড় ফাইলগুলির জন্য এটি উল্লেখযোগ্যভাবে দ্রুত। উদাহরণস্বরূপ, 1967063040 বাইট ফাইলের (এমপি 3 ফাইল পূর্ণ এসডি কার্ডের একটি ডিস্ক চিত্র), md5sum + sha256sum প্রায় 1m44.9 সেকেন্ড নেয়, ডুয়াল_হ্যাশ.পি লাগে 1m0.312।
dual_hash.py
#! /usr/bin/env python
''' Calculate MD5 and SHA-256 digests of a file simultaneously
Written by PM 2Ring 2014.10.23
'''
import sys
import hashlib
def digests(fname, blocksize):
md5 = hashlib.md5()
sha = hashlib.sha256()
with open(fname, 'rb') as f:
while True:
block = f.read(blocksize)
if not block:
break
md5.update(block)
sha.update(block)
print("md5: %s" % md5.hexdigest())
print("sha256: %s" % sha.hexdigest())
def main(*argv):
blocksize = 1<<16 # 64kB
if len(argv) < 2:
print("No filename given!\n")
print("Calculate md5 and sha-256 message digests of a file.")
print("Usage:\npython %s filename [blocksize]\n" % sys.argv[0])
print("Default blocksize=%d" % blocksize)
return 1
fname = argv[1]
if len(argv) > 2:
blocksize = int(sys.argv[2])
print("Calculating MD5 and SHA-256 digests of %r using a blocksize of %d" % (fname, blocksize))
digests(fname, blocksize)
if __name__ == '__main__':
sys.exit(main(*sys.argv))
আমি এই কর্মসূচির একটি সি / সি ++ সংস্করণ একটু দ্রুত হবে অনুমান, কিন্তু অনেক না, যেহেতু কাজ অধিকাংশ hashlib মডিউল দেখবেন, যার দ্বারা সম্পন্ন করা হচ্ছে হয় সি (অথবা সি ++) তে লিখিত। এবং আপনি উপরে উল্লিখিত হিসাবে, বড় ফাইলগুলির জন্য বাধা হ'ল IO গতি।
for i in file1 file2 …; do sha256 "$i"& md5sum "$i"; done