Cách tự động so sánh các giá trị băm md5sum cho một số lượng lớn tệp


28

Tôi có thể kiểm tra băm md5sum của một tệp từ thiết bị đầu cuối như,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Nhưng phần khó khăn là so sánh giá trị băm với chính xác.

Thật khó để so sánh đầu ra 32 ký tự với giá trị băm gốc / chính xác bởi bất kỳ con người nào cho một số lượng lớn tệp. Trước hết công việc sẽ rất đơn điệu và có phạm vi lỗi lớn.

Có thể tự động hóa quá trình so sánh, tốt nhất là trong CLI?

Câu trả lời:


39

Ví dụ tôi có một tập tin gọi là test_binary.

MD5 tổng kiểm tra tệp là ef7ab26f9a3b2cbd35aa3e7e69aad86c

Để kiểm tra nó tự động chạy này:

$ md5sum -c <<<"ef7ab26f9a3b2cbd35aa3e7e69aad86c *path/to/file/test_binary"
test_binary: OK

hoặc là

$ echo "595f44fec1e92a71d3e9e77456ba80d1  filetohashA.txt" | md5sum -c -

Trích dẫn từ người đàn ông

   -c, --check
          read MD5 sums from the FILEs and check them

Trích dẫn từ wiki

Lưu ý: Phải có hai khoảng trắng giữa mỗi giá trị md5sum và tên tệp để được so sánh. Mặt khác, lỗi sau đây sẽ dẫn đến: "không tìm thấy dòng tổng kiểm tra MD5 được định dạng chính xác".

Liên kết đến wiki

Ngoài ra, bạn chỉ có thể đọc băm md5 từ tệp

$ md5sum -c md5sum_formatted_file.txt

Đó là tập tin mong đợi với định dạng:

<md5sum_checksum><space><space><file_name>

Giới thiệu *<space>sau MD5 tổng băm. Có một lưu ý nhỏ ở người đàn ông:

 When  checking,  the
       input  should  be a former output of this program.  The default mode is
       to print a line with checksum, a character indicating input  mode  ('*'
       for binary, space for text), and name for each FILE.

Và đây là liên kết đến stackoverflow nơi tôi tìm thấy câu trả lời cho câu hỏi, tại sao đôi khi chúng ta nên phân biệt binarycác tệp và texttệp.



3
Là dấu hoa thị cần thiết?
jobin

Câu hỏi thú vị. Tôi luôn luôn sử dụng với *, nhưng wiki nói rằng nó phải là hai khoảng trắng. Tôi sẽ tìm kiếm ...
c0rp

@souravc ok, tôi đã tìm thấy thông tin về *, sẽ cập nhật sớm
c0rp

@Jobin Tôi thêm thông tin đầy đủ *để trả lời
c0rp

Điều đó có ý nghĩa. + 1'd
jobin

2

Một khả năng là sử dụng tiện ích cfv

sudo apt-get install cfv

CFV hỗ trợ nhiều loại băm và cả kiểm tra và tạo tệp băm.

# List the files
$ ls
test.c
# Create a hash file
$ cfv -tmd5 -C
temp.md5: 1 files, 1 OK.  0.001 seconds, 302.7K/s
# Test the hash file
$ cfv -tmd5 -T
temp.md5: 1 files, 1 OK.  0.001 seconds, 345.1K/s
# Display the hash file
$ cat *.md5
636564b0b10b153219d6e0dfa917d1e3 *test.c

1
cảm ơn câu trả lời của bạn, nhưng nó cần phải cài đặt một tiện ích khác. Đồng thời nó cũng cung cấp hỗ trợ cho định dạng khác. Thật tốt khi biết về nó. Nhưng ở bối cảnh hiện tại tôi sẽ đi với câu trả lời khác. Dù sao +1 từ tôi.
souravc

1

Có, dấu hoa thị *là cần thiết cho lệnh này. Hãy xem ví dụ này.

Đây là tệp nhị phân và giả sử giá trị md5sum chính xác là exampleofcorrectmd5value00000000(32 hexadecimal char)

[root@Linux update]# ls -lh
total 137M
-rw-r--r-- 1 root root 137M Nov  5 13:01 binary-file.run.tgz
[root@Linux update]# 

-c, - kiểm tra

đọc tổng MD5 từ FILE và kiểm tra chúng

Nếu giá trị md5sum khớp với tệp nhị phân, bạn sẽ nhận được đầu ra này

[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000" *binary-file.run.tgz"
binary-file.run.tgz: OK
[root@Linux ~]# 

Và đây là khi giá trị md5sum không khớp

[root@Linux update]# md5sum -c <<< "exampleofwrongmd5value0000000000 *binary-file.run.tgz"
binary-file.run.tgz: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
[root@Linux update]# 

Nếu không có dấu hoa thị *, bạn sẽ nhận được thông báo lỗi sau thậm chí nghĩ rằng giá trị md5 là chính xác

[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000 binary-file.run.tgz" 
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]# 

Ngoài ra, bạn sẽ nhận được thông báo lỗi tương tự nếu md5sum không có 32 ký tự thập lục phân trong đó. Trong ví dụ này, nó chỉ có 31 ký tự.

[root@Linux ~]# md5sum -c <<< "exampleofmd5valuelessthan32char *binary-file.run.tgz" 
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]# 

Giải pháp cho nhiều tập tin

Nếu bạn có nhiều tệp và muốn tự động hóa quy trình, bạn có thể làm theo các bước sau:

user@Ubuntu:~$ ls -lh
total 12K
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-a
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-b
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-c
user@Ubuntu:~$ 

Tạo md5sum cho mỗi tệp và lưu nó vào md5sum.txt

user@Ubuntu:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1  file-a
1b2297c171a9a450d184871ccf6c9ad4  file-b
7f4d13d9b0b6ac086fd68637067435c5  file-c
user@Ubuntu:~$ 

Để kiểm tra md5sum cho tất cả các tệp, sử dụng lệnh sau.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: OK
file-c: OK
user@Ubuntu:~$ 

Đây là ví dụ nếu giá trị md5sum không khớp với tệp. Trong trường hợp này, tôi sẽ sửa đổi file-bnội dung

user@Ubuntu:~$ echo "new data" > file-b 
user@Ubuntu:~$ 

Xem, đây là thông báo lỗi. Hi vọng điêu nay co ich.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: FAILED
file-c: OK
md5sum: WARNING: 1 computed checksum did NOT match
user@Ubuntu:~$ 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.