আমি এক কমান্ড দ্বারা md5 , sha1 হ্যাশ মান গণনা করার জন্য কমান্ড বা ইউটিলিটিগুলি খুঁজছি ।
এখনই উবুন্টু আছে sha1sum
এবং মান md5sum
গণনার জন্য কমান্ড hash
।
আমি এক কমান্ড দ্বারা md5 , sha1 হ্যাশ মান গণনা করার জন্য কমান্ড বা ইউটিলিটিগুলি খুঁজছি ।
এখনই উবুন্টু আছে sha1sum
এবং মান md5sum
গণনার জন্য কমান্ড hash
।
উত্তর:
আপনি কিছু সঠিক বাশ নিনজা-ফু দিয়ে এটি অর্জন করতে পারেন। :)
আপনি একবারে একটি গণনা করার পদ্ধতিটি জানেন:
$ 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)]"
আমি নিশ্চিত না যদিও আউটপুট ক্রম সম্পর্কিত আপনার কোনও গ্যারান্টি রয়েছে।
tee
এবং শেলের আউটপুট পুনঃনির্দেশের চতুর ব্যবহার হ'ল উপায়। এটি প্রচুর সংস্থান সঞ্চয় করে, বিশেষত বড় ফাইলগুলি পড়ার সময়।
কমান্ড লাইনে আপনাকে সহায়তা করতে পারে না তবে আমি চটিকাশ নামে একটি জিইউআই সরঞ্জাম জানি ।
আপনি কুইক্যাশ থেকে সেই সরঞ্জামটি ডাউনলোড করতে পারেন
বর্ণনা:
একটি লিনাক্স এবং উইন্ডোজ জিইউআই ফাইলগুলির দ্রুত নির্বাচন এবং পরবর্তী হ্যাশিং সক্ষম করতে (পৃথকভাবে বা ফোল্ডার কাঠামোতে পুনরাবৃত্তভাবে) পাঠ্য এবং (লিনাক্সে) ডিস্কগুলিকে সক্ষম করে। লিনাক্সের জন্য তৈরি, তবে উইন্ডোজের জন্যও উপলব্ধ। MD5, SHA1, SHA256, SHA512 উপলভ্য। আউটপুট ক্লিপবোর্ডে অনুলিপি করা হয়েছে বা সিএসভি \ এইচটিএমএল ফাইল হিসাবে সংরক্ষণ করা হয়েছে।
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)
md5sum hosts
। তারপরে, এই ফলাফলটি যাচাই করতে:echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check
(দেওয়া উচিতhosts: OK
:)