Tôi đang tìm kiếm lệnh hoặc tiện ích để tính giá trị băm md5 , sha1 bằng một lệnh.
Ngay bây giờ ubfox có sha1sum
và md5sum
lệnh để tính hash
giá trị.
Tôi đang tìm kiếm lệnh hoặc tiện ích để tính giá trị băm md5 , sha1 bằng một lệnh.
Ngay bây giờ ubfox có sha1sum
và md5sum
lệnh để tính hash
giá trị.
Câu trả lời:
Bạn có thể đạt được điều này với một số ninja bash thích hợp. :)
Bạn biết thủ tục để tính toán từng cái một:
$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1 -
$ echo abc | sha1sum
03cfd743661f07975fa2f1220c5194cbaff48451 -
Chỉnh sửa: như @gertvdijk đã đề xuất và đọc các trang thông tin thêm một chút, điều này có thể được thực hiện trực tiếp với tee và Thay thế quy trình được hỗ trợ bởi các trình bao hiện đại, không cần chuyển hướng. Bằng cách này, bạn có thể chuyển dữ liệu của mình đến hai quy trình và một tệp bằng cách sử dụng tee:
$ echo abc | tee >(md5sum) >(sha1sum) > output.txt
Cũng có thể xâu chuỗi nếu bạn cần nhiều hơn, nhưng bạn phải chăm sóc STDOUT từ tất cả các quy trình con. Điều này sẽ KHÔNG cung cấp cho bạn kết quả mong đợi, nhưng trộn hai tổng đầu tiên cùng với dữ liệu trong output.txt:
$ echo abc | tee >(md5sum) >(sha1sum) | tee >(sha256sum) >(sha512sum) > output.txt
Nếu bạn chuyển hướng tổng kiểm tra đến một tệp bên trong các quy trình được thay thế, bạn có thể xâu chuỗi chúng theo ý muốn:
$ echo abc | tee >(md5sum > /tmp/md5.txt) >(sha1sum > /tmp/sha1.txt) | tee >(sha256sum > /tmp/sha256.txt) >(sha512sum > /tmp/sha512.txt) > output.txt
Đây là đề xuất ban đầu của tôi mà không cần thay thế quy trình, nhưng cho phép sử dụng chuỗi / đệ quy mà không trộn lẫn dữ liệu và đầu ra:
$ echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
0bee89b07a248e27c83fc3d5951213c1 -
03cfd743661f07975fa2f1220c5194cbaff48451 -
Mẹo ở đây là sử dụng tee
, sao chép dữ liệu thành STDOUT và một tệp. Chúng tôi đang thông minh bằng cách yêu cầu nó ghi dữ liệu vào tệp / Proc / self / fd / 2, điều này luôn luôn là mô tả tệp STDERR của quy trình hiện tại. Và với > >(program)
cú pháp, chúng ta có thể chuyển hướng từng bộ mô tả tệp sang STDIN của chương trình thay vì tệp. Chỉ thích |
, nhưng với sự kiểm soát nhiều hơn. > >(md5sum)
chuyển hướng STDOUT đến md5sum
chương trình, trong khi 2> >(sha1sum)
chuyển hướng STDERR đến sha1sum
chương trình.
Lưu ý rằng thứ tự 2>
và >
dường như có vấn đề, tôi phải đặt 2>
đầu tiên trên dòng lệnh. Chúng được đánh giá từ phải sang trái, nhưng tôi không chắc tại sao điều này lại tạo ra sự khác biệt.
Để thực hiện việc này trên tệp hoặc ổ cứng, bạn nên thay thế "echo abc" bằng một con mèo hoặc một dd, ví dụ:
dd if=/dev/sda bs=8k | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
Điều tiện lợi về điều này là bạn thực sự có thể tái diễn và chạy một số cùng một lúc, không chỉ hai. Cú pháp có lông, nhưng điều này hoạt động:
echo abc | tee -a /proc/self/fd/2 2> >(tee -a /proc/self/fd/2 2> >(sha256sum) > >(sha384sum) ) > >(sha512sum)
Nếu bạn muốn nắm bắt kết quả và sử dụng nó trong một tập lệnh, điều đó cũng hoạt động:
A=$(echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum))
Bây giờ $A
là một chuỗi chứa tất cả đầu ra, bao gồm cả dòng mới. Bạn cũng có thể phân tích các giá trị sau:
echo "checksum=[$(echo "$A" | head -1 | cut -d " " -f 1)]"
Tôi không chắc chắn rằng bạn có bất kỳ đảm bảo về việc đặt hàng đầu ra mặc dù.
tee
và sử dụng thông minh chuyển hướng đầu ra trong vỏ là cách để đi. Điều này tiết kiệm rất nhiều tài nguyên, đặc biệt là khi đọc các tệp lớn.
Không thể giúp bạn với dòng lệnh nhưng tôi biết một công cụ GUI có tên là quickhash.
Bạn có thể tải xuống công cụ đó từ Quickhash
Sự miêu tả:
GUI Linux và Windows để cho phép lựa chọn nhanh và băm các tệp (riêng lẻ hoặc đệ quy trong toàn bộ cấu trúc thư mục) và các đĩa (trên Linux). Được thiết kế cho Linux, nhưng cũng có sẵn cho Windows. MD5, SHA1, SHA256, SHA512 có sẵn. Đầu ra được sao chép vào clipboard hoặc được lưu dưới dạng tệp 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.
// Kịch bản bắt đầu từ đây
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_iter_' '] print' Stop Time :: ', custom_checksum_profile [' stoptime '] print' Thời gian xử lý :: ', custom_checksum_profile [' processtime '] ngoại trừ đối tượng TypeError: không thể mở tệp đầu vào #raise 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
. Sau đó, để xác minh kết quả này:echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check
(nên đưa rahosts: OK
:)