Saya mencari perintah atau utilitas untuk menghitung md5 , nilai hash sha1 oleh satu perintah.
Saat ini ubuntu memiliki sha1sum
dan md5sum
perintah untuk menghitung hash
nilai.
Saya mencari perintah atau utilitas untuk menghitung md5 , nilai hash sha1 oleh satu perintah.
Saat ini ubuntu memiliki sha1sum
dan md5sum
perintah untuk menghitung hash
nilai.
Jawaban:
Anda dapat mencapai ini dengan bash ninja-fu. :)
Anda tahu prosedur untuk menghitung satu per satu:
$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1 -
$ echo abc | sha1sum
03cfd743661f07975fa2f1220c5194cbaff48451 -
Sunting: seperti yang disarankan @gertvdijk, dan membaca halaman info sedikit lebih banyak, ini dapat dilakukan secara langsung dengan tee dan Proses Pergantian didukung oleh shell modern, tanpa arahan ulang. Dengan cara ini Anda dapat meneruskan data Anda ke dua proses dan satu file menggunakan tee:
$ echo abc | tee >(md5sum) >(sha1sum) > output.txt
Mungkin juga untuk melakukan rantai jika Anda membutuhkan lebih banyak, tetapi Anda harus mengurus STDOUT dari semua subproses. Ini TIDAK akan memberi Anda hasil yang diharapkan, tetapi mencampur dua checksum pertama bersama dengan data di output.txt:
$ echo abc | tee >(md5sum) >(sha1sum) | tee >(sha256sum) >(sha512sum) > output.txt
Jika Anda mengarahkan checksum ke file di dalam proses yang disubstitusi, Anda dapat memilah ini sesuka Anda:
$ echo abc | tee >(md5sum > /tmp/md5.txt) >(sha1sum > /tmp/sha1.txt) | tee >(sha256sum > /tmp/sha256.txt) >(sha512sum > /tmp/sha512.txt) > output.txt
Inilah saran awal saya tanpa substitusi proses, tetapi memungkinkan chaining / penggunaan rekursif tanpa mencampurkan data dan output:
$ echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
0bee89b07a248e27c83fc3d5951213c1 -
03cfd743661f07975fa2f1220c5194cbaff48451 -
Kuncinya di sini adalah menggunakan tee
, yang menggandakan data ke STDOUT dan file. Kami pandai dengan menyuruhnya menulis data ke file / proc / self / fd / 2, yang kebetulan selalu menjadi deskriptor file STDERR proses saat ini. Dan dengan > >(program)
sintaks kita dapat mengarahkan setiap deskriptor file ke program STDIN daripada file. Sama seperti |
, tetapi dengan kontrol lebih. > >(md5sum)
pengalihan STDOUT ke md5sum
program, sementara 2> >(sha1sum)
pengalihan STDERR ke sha1sum
program.
Perhatikan bahwa urutan 2>
dan >
tampaknya penting, saya harus menempatkan 2>
dulu pada baris perintah. Ini dievaluasi dari kanan ke kiri, tetapi saya tidak yakin mengapa ini membuat perbedaan.
Untuk melakukan ini pada file atau hard drive, Anda harus mengganti "echo abc" dengan cat atau dd, misalnya:
dd if=/dev/sda bs=8k | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
Hal bagus tentang ini adalah Anda dapat benar-benar melakukan recurse dan menjalankan beberapa sekaligus, bukan hanya dua. Sintaksnya menjadi berbulu, tetapi ini bekerja:
echo abc | tee -a /proc/self/fd/2 2> >(tee -a /proc/self/fd/2 2> >(sha256sum) > >(sha384sum) ) > >(sha512sum)
Jika Anda ingin menangkap hasilnya dan menggunakannya dalam skrip, itu juga berfungsi:
A=$(echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum))
Sekarang $A
adalah string yang berisi semua output, termasuk baris baru. Anda juga dapat menguraikan nilai-nilai nanti:
echo "checksum=[$(echo "$A" | head -1 | cut -d " " -f 1)]"
Saya tidak yakin Anda memiliki jaminan tentang pemesanan output.
tee
dan penggunaan pengalihan output yang cerdas dalam shell adalah cara yang harus dilakukan. Ini menghemat banyak sumber daya, terutama saat membaca file besar.
Tidak dapat membantu Anda dengan baris perintah tapi saya tahu alat GUI bernama quickhash.
Anda dapat mengunduh alat itu dari Quickhash
Deskripsi:
Linux dan Windows GUI untuk mengaktifkan pemilihan cepat dan hashing file berikutnya (secara individu atau secara rekursif di seluruh struktur folder) teks dan (pada Linux) disk. Dirancang untuk Linux, tetapi juga tersedia untuk Windows. MD5, SHA1, SHA256, SHA512 tersedia. Output disalin ke clipboard atau disimpan sebagai file CSV \ HTML.
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.
// Script mulai dari sini
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']
custom_checksum_profile ['file_read_iterations']) # print ('Last Chunk (bytes):', custom_checksum_profile ['last_chunk_size']) cetak 'MD5 ::', custom_checksum_profile ['md5_checksum'] print 'SHA1check' custom_chum ' '] cetak' Stop Time :: ', custom_checksum_profile [' stoptime '] cetak' Processing Time :: ', custom_checksum_profile [' processtime '] kecuali TypeError: # objek' NoneType 'tidak dapat disubkripsikan --- pada dasarnya ini harus terjadi ketika file input tidak dapat dibuka # naik pass # csv output
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
. Kemudian, untuk memverifikasi hasil ini:echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check
(harus memberikan:hosts: OK
)