একক কমান্ডের সাথে এমডি 5 এবং শ 1 চেকসাম্প ফেলে দিন!


9

আমি এক কমান্ড দ্বারা md5 , sha1 হ্যাশ মান গণনা করার জন্য কমান্ড বা ইউটিলিটিগুলি খুঁজছি ।
এখনই উবুন্টু আছে sha1sumএবং মান md5sumগণনার জন্য কমান্ড hash


2
কেন আপনি এটি করতে চান না? সাধারণত আপনি হ্যাশগুলি তৈরির পরে তা যাচাই করতে সক্ষম হতে চান। উদাহরণস্বরূপ, একটি হ্যাশ উৎপন্ন করার জন্য: md5sum hosts। তারপরে, এই ফলাফলটি যাচাই করতে: echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check(দেওয়া উচিত hosts: OK:)
লেকেনস্টেইন

2
ধরুন, যদি 500 গিগাবাইট হার্ড ড্রাইভের উভয় sha1 এবং md5 এর 'হ্যাশ মান' গণনা করতে চান। যদি আমি একে একে গণনা করি (sha1sum এবং md5sum ব্যবহার করে) দ্বিগুণ সময় লাগবে। তবে যদি উইন্ডোজ সফটওয়্যারটির মতো একক উপযোগ দিয়ে করা যায় তবে আমার পছন্দসই উত্তর হবে।
এমএস পারমার

উত্তর:


9

আপনি কিছু সঠিক বাশ নিনজা-ফু দিয়ে এটি অর্জন করতে পারেন। :)

আপনি একবারে একটি গণনা করার পদ্ধতিটি জানেন:

$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1  -
$ echo abc | sha1sum
03cfd743661f07975fa2f1220c5194cbaff48451  -

সম্পাদনা করুন: যেমন @gertvdijk পরামর্শ দিয়েছে এবং তথ্য পৃষ্ঠাগুলি আরও কিছুটা পড়ছে, এটি সরাসরি টি এবং প্রসেস সাবস্টিটিউশনের মাধ্যমে আধুনিক শাঁস দ্বারা সমর্থিত, পুনঃনির্দেশ ছাড়াই করা যেতে পারে। এই উপায়ে আপনি দুটি ব্যবহার করে আপনার ডেটা দুটি প্রক্রিয়া এবং একটি ফাইল টিতে ব্যবহার করতে পারেন:

$ echo abc | tee >(md5sum) >(sha1sum) > output.txt

আপনার আরও বেশি প্রয়োজন হলে চেইন করাও সম্ভব, তবে আপনাকে সমস্ত উপ-প্রক্রিয়াগুলি থেকে STDOUT এর যত্ন নিতে হবে। এটি আপনাকে প্রত্যাশিত ফলাফল দেবে না, তবে আউটপুট.টেক্সটে থাকা ডেটার সাথে প্রথম দুটি চেকসাম মিশ্রিত করে:

$ echo abc | tee >(md5sum) >(sha1sum) | tee >(sha256sum) >(sha512sum) > output.txt

যদি আপনি বিকল্প প্রক্রিয়াগুলির অভ্যন্তরে কোনও ফাইলটিতে চেকসামগুলি পুনর্নির্দেশ করে থাকেন তবে আপনি এগুলি আপনার পছন্দ মতো চেইন করতে পারেন:

$ echo abc | tee >(md5sum > /tmp/md5.txt) >(sha1sum > /tmp/sha1.txt) | tee >(sha256sum > /tmp/sha256.txt) >(sha512sum > /tmp/sha512.txt) > output.txt

প্রক্রিয়া প্রতিস্থাপন ছাড়াই এখানে আমার প্রাথমিক পরামর্শ, তবে যা ডেটা এবং আউটপুটকে মিশ্রিত না করে চেইন / পুনরাবৃত্ত ব্যবহারের অনুমতি দেয়:

$ echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
0bee89b07a248e27c83fc3d5951213c1  -
03cfd743661f07975fa2f1220c5194cbaff48451  -

এখানে কৌশলটি ব্যবহার করা হয় tee, যা এসটিডিআউট এবং একটি ফাইলের ডেটা সদৃশ করে। আমরা ফাইল / প্রোক / স্ব / এফডি / 2 ফাইলটিতে ডেটা লিখতে বলার মাধ্যমে চালাক হয়ে যাচ্ছি যা সর্বদা বর্তমান প্রক্রিয়াটির 'এসটিডিআরআর ফাইল বিবরণকারী হিসাবে ঘটে। এবং > >(program)সিনট্যাক্সের সাহায্যে আমরা প্রতিটি ফাইল বর্ণনাকারী ফাইলের পরিবর্তে একটি প্রোগ্রামের এসটিডিআইএন-এ পুনর্নির্দেশ করতে পারি। ঠিক যেমন |, তবে আরও নিয়ন্ত্রণের সাথে। > >(md5sum)stdout- এ পুননির্দেশনা md5sum, প্রোগ্রাম যখন 2> >(sha1sum)পুনঃনির্দেশ করা stderr sha1sumপ্রোগ্রাম।

লক্ষ্য করুন ক্রম 2>এবং >কোন ব্যাপার বলে মনে হয়, আমি দিতে হবে 2>কমান্ড লাইন প্রথম। এগুলি ডান থেকে বামে মূল্যায়ন করা হয় তবে আমি নিশ্চিত নই কেন এটি একটি পার্থক্য রাখে।

কোনও ফাইল বা হার্ড ড্রাইভে এটি করার জন্য, আপনাকে "ইকো অ্যাবসি" কে একটি বিড়াল বা ডিডির সাথে প্রতিস্থাপন করা উচিত, যেমন:

dd if=/dev/sda bs=8k | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)

এই সম্পর্কে নিফটি জিনিসটি হ'ল আপনি কেবল দু'টি নয়, একই সময়ে বিভিন্ন সময়ে পুনরাবৃত্তি করতে এবং চালাতে পারেন। বাক্য গঠনটি লোমশ হয়ে যায় তবে এটি কাজ করে:

echo abc | tee -a /proc/self/fd/2 2> >(tee -a /proc/self/fd/2 2> >(sha256sum) > >(sha384sum) ) > >(sha512sum)

আপনি যদি ফলাফলটি ক্যাপচার করতে চান এবং এটি কোনও স্ক্রিপ্টে ব্যবহার করতে চান তবে এটি খুব কার্যকর:

A=$(echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum))

এখন $Aনিউলাইনগুলি সহ সমস্ত আউটপুট সমেত একটি স্ট্রিং রয়েছে। আপনি পরে মানগুলি পার্স করতে পারেন:

echo "checksum=[$(echo "$A" | head -1 | cut -d " " -f 1)]"

আমি নিশ্চিত না যদিও আউটপুট ক্রম সম্পর্কিত আপনার কোনও গ্যারান্টি রয়েছে।


2
+1 টি। teeএবং শেলের আউটপুট পুনঃনির্দেশের চতুর ব্যবহার হ'ল উপায়। এটি প্রচুর সংস্থান সঞ্চয় করে, বিশেষত বড় ফাইলগুলি পড়ার সময়।
gertvdijk

2
যাইহোক, আমি মনে করি আপনার স্ট্রিমের আউটপুট সদৃশ করতে stderr এ পুনঃনির্দেশ করার দরকার নেই। একটি সাব-শেল ব্যবহার স্টাডার বজায় রাখার কৌশলটিও করবে। আমার উদাহরণটি এখানে একটি ব্লগ পোস্টে দেখুন
জির্টভিডিজক

@gertvdijk ডান, প্রক্রিয়া প্রতিস্থাপন পরিষ্কার এবং চেইন সহজ (আপনার পুনরাবৃত্তি প্রয়োজন হয় না)। আমি আমার প্রতিক্রিয়া আপডেট করব।
কেটিল

খুশী হলাম। আমি যদি পারতাম তবে আপনাকে আরও একটি উঁচুতে উপহার দেব। :-)
gertvdijk

এই ছোট ছোট ফাইলগুলির জন্য ভাল কাজ করার সময়, আপনি বড় ফাইলগুলির জন্য প্রচেষ্টা এবং প্রক্রিয়া করার সময় দ্বিগুণ করছেন যা আমি এড়াতে চাই ...
একরিয়ার্ক

3

কমান্ড লাইনে আপনাকে সহায়তা করতে পারে না তবে আমি চটিকাশ নামে একটি জিইউআই সরঞ্জাম জানি

আপনি কুইক্যাশ থেকে সেই সরঞ্জামটি ডাউনলোড করতে পারেন

বর্ণনা:

একটি লিনাক্স এবং উইন্ডোজ জিইউআই ফাইলগুলির দ্রুত নির্বাচন এবং পরবর্তী হ্যাশিং সক্ষম করতে (পৃথকভাবে বা ফোল্ডার কাঠামোতে পুনরাবৃত্তভাবে) পাঠ্য এবং (লিনাক্সে) ডিস্কগুলিকে সক্ষম করে। লিনাক্সের জন্য তৈরি, তবে উইন্ডোজের জন্যও উপলব্ধ। MD5, SHA1, SHA256, SHA512 উপলভ্য। আউটপুট ক্লিপবোর্ডে অনুলিপি করা হয়েছে বা সিএসভি \ এইচটিএমএল ফাইল হিসাবে সংরক্ষণ করা হয়েছে।


0
Here i have find one python script from source which calculate hash values. and also i find some statistics about hash value calculation.

 - `md5sum` takes 00:3:00 min to calculate 4GB USB.
 - `sha2sum` takes 00:3:01 min to calculate 4GB USB.
 - While phython script takes 3:16 min to calculate both MD5 and SHA1.

// স্ক্রিপ্ট এখান থেকে শুরু

def get_custom_checksum(input_file_name):
    from datetime import datetime
    starttime = datetime.now()
    # START: Actual checksum calculation
    from hashlib import md5, sha1, sha224, sha384, sha256, sha512
    #chunk_size = 1 # 1 byte -- NOT RECOMENDED -- USE AT LEAST 1KB. When 1KB takes 1 min to run, 1B takes 19 minutes to run
    #chunk_size = 1024 # 1 KB
    chunk_size = 1048576 # 1024 B * 1024 B = 1048576 B = 1 MB
    file_md5_checksum = md5()
    file_sha1_checksum = sha1()

    try:
        with open(input_file_name, "rb") as f:
            byte = f.read(chunk_size)
            previous_byte = byte
            byte_size = len(byte)
            file_read_iterations = 1
            while byte:
                file_md5_checksum.update(byte)
                file_sha1_checksum.update(byte)               
                previous_byte = byte
                byte = f.read(chunk_size)
                byte_size += len(byte)
                file_read_iterations += 1
    except IOError:
        print ('File could not be opened: %s' % (input_file_name))
        #exit()
        return
    except:
        raise
    # END: Actual checksum calculation
    # For storage purposes, 1024 bytes = 1 kilobyte
    # For data transfer purposes, 1000 bits = 1 kilobit
    kilo_byte_size = byte_size/1024
    mega_byte_size = kilo_byte_size/1024
    giga_byte_size = mega_byte_size/1024
    bit_size = byte_size*8
    kilo_bit_size = bit_size/1000
    mega_bit_size = kilo_bit_size/1000
    giga_bit_size = mega_bit_size/1000
    last_chunk_size = len(previous_byte)
    stoptime = datetime.now()
    processtime = stoptime-starttime
    custom_checksum_profile = {
        'starttime': starttime,
        'byte_size': byte_size,
        'kilo_byte_size': kilo_byte_size,
        'mega_byte_size': mega_byte_size,
        'giga_byte_size': giga_byte_size,
        'bit_size': bit_size,
        'kilo_bit_size': kilo_bit_size,
        'mega_bit_size': mega_bit_size,
        'giga_bit_size': giga_bit_size,
        'file_read_iterations': file_read_iterations,
        'last_chunk_size': last_chunk_size,
        'md5_checksum': file_md5_checksum.hexdigest(),
        'sha1_checksum': file_sha1_checksum.hexdigest(),        
        'stoptime': stoptime,
        'processtime': processtime,
        }
    return custom_checksum_profile



def print_custom_checksum(input_file_name):
    custom_checksum_profile = get_custom_checksum(input_file_name)
    try:
        print 'Start Time ::', custom_checksum_profile['starttime']

কাস্টম_চেকসাম_প্রোফাইল ['ফাইল_ড্রেড_াইটেরেশনস']) # মুদ্রণ ('সর্বশেষ খণ্ড (বাইটস):', কাস্টম_চেকসাম_প্রোফাইল ['শেষ_চাঁক_সাইজ']) মুদ্রণ 'এমডি 5 ::', কাস্টম_চেকসাম_প্রোফাইল ['এমডি 5_চেকসাম'] মুদ্রণ 'এসএএএ 1 ::', কাস্টম_চেকসাম_আর ']' স্টপ টাইম :: ', কাস্টম_চেকসাম_প্রফাইলে [' স্টপটাইম '] প্রিন্ট করুন' প্রসেসিং টাইম :: ', কাস্টম_চেকসাম_প্রোফাইল [' প্রসেসটাইম '] টাইপ এয়ারার ব্যতীত: #' নন টাইপ 'অবজেক্ট সাবস্ক্রিপ্টযোগ্য নয় --- মূলত এটি হওয়া উচিত যখন ইনপুট ফাইলটি #raise পাস # CSV আউটপুট খোলা যায় নি

import argparse
script_version='0.0.2'
parser = argparse.ArgumentParser(description='Determine and print various checksums of an input file and its size. Supported checksums are MD5, SHA1, SHA224, SHA256, SHA384, and SHA512.', version=script_version)
parser.add_argument('-f', '--file', metavar='in-file', action='store', dest='file_name', type=str, required=True, help='Name of file for which the checksum needs to be calculated')
args = parser.parse_args()
print 'Processing File ::', args.file_name
print_custom_checksum(args.file_name)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.