วิธีทำการเปรียบเทียบค่าแฮช md5sum โดยอัตโนมัติสำหรับไฟล์จำนวนมาก


28

ฉันสามารถตรวจสอบ md5sum hash ของไฟล์จากเทอร์มินัลว่า

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

แต่ส่วนที่ยากคือการเปรียบเทียบค่าแฮชกับค่าที่แน่นอน

เป็นการยากที่จะเปรียบเทียบเอาต์พุต 32 ตัวอักษรกับค่าแฮชดั้งเดิม / ค่าที่ถูกต้องโดยมนุษย์สำหรับไฟล์จำนวนมาก ก่อนอื่นงานจะน่าเบื่อมากและมีขอบเขตข้อผิดพลาดใหญ่

เป็นไปได้หรือไม่ที่จะทำให้กระบวนการเปรียบเทียบเป็นอัตโนมัติโดยเฉพาะอย่างยิ่งใน CLI

คำตอบ:


39

test_binaryเช่นฉันมีไฟล์ที่เรียกว่า

ผลรวมของการทดสอบ MD5 คือ ef7ab26f9a3b2cbd35aa3e7e69aad86c

หากต้องการทดสอบให้เรียกใช้สิ่งนี้โดยอัตโนมัติ:

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

หรือ

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

อ้างจากคน

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

ขอบคุณจาก wiki

หมายเหตุ: จะต้องมีช่องว่างสองช่องระหว่างแต่ละค่า md5sum และชื่อไฟล์ที่จะเปรียบเทียบ มิฉะนั้นจะเกิดข้อผิดพลาดต่อไปนี้: "ไม่พบบรรทัดการตรวจสอบ MD5 ที่จัดรูปแบบอย่างถูกต้อง"

ลิงก์ไปยังวิกิ

นอกจากนี้คุณสามารถอ่าน md5 hash ได้จากไฟล์

$ md5sum -c md5sum_formatted_file.txt

มันคาดหวังว่าไฟล์ที่มีรูปแบบ:

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

เกี่ยวกับ*และ<space>หลังแฮชผลรวม MD5 มีโน้ตเล็กน้อยในมนุษย์:

 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.

และนี่คือลิงค์ไปยังstackoverflowที่ฉันพบคำตอบสำหรับคำถามว่าทำไมบางครั้งเราถึงแยกแยะbinaryไฟล์และtextไฟล์



3
ดอกจันจำเป็นหรือไม่
jobin

คำถามที่น่าสนใจ ฉันใช้กับเสมอ*แต่วิกิบอกว่าควรเป็นสองช่องว่าง ฉันจะค้นหา ...
c0rp

@souravc ตกลงฉันพบข้อมูลเกี่ยวกับ * จะอัปเดตเร็ว ๆ นี้
c0rp

@Jobin ฉันเพิ่มข้อมูลเพิ่มเติม*เพื่อตอบ
c0rp

นั่นทำให้รู้สึก +1 แล้ว
jobin

2

ความเป็นไปได้อย่างหนึ่งคือการใช้ยูทิลิตี้cfv

sudo apt-get install cfv

CFV รองรับแฮชหลายประเภทและทั้งการสร้างและทดสอบไฟล์แฮช

# 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
ขอบคุณสำหรับคำตอบของคุณ แต่ต้องติดตั้งยูทิลิตี้อื่น ในขณะเดียวกันก็รองรับรูปแบบอื่นด้วย มันเป็นการดีที่จะรู้เกี่ยวกับมัน แต่ในบริบทปัจจุบันฉันจะไปกับคำตอบอื่น ๆ อย่างไรก็ตาม +1 จากฉัน
souravc

1

ใช่*จำเป็นต้องใช้ดอกจันสำหรับคำสั่งนี้ ลองดูตัวอย่างนี้

นี่คือไฟล์ไบนารีและบอกว่าค่า md5sum ที่ถูกต้องคือexampleofcorrectmd5value00000000(32 เลขฐานสิบหกถ่าน)

[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, - ตรวจสอบ

อ่านผลรวม MD5 จากไฟล์และตรวจสอบ

หากค่า md5sum ตรงกับไฟล์ไบนารีคุณจะได้ผลลัพธ์นี้

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

และนี่คือเมื่อค่า md5sum ไม่ตรงกัน

[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]# 

หากไม่มีเครื่องหมายดอกจัน*คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้แม้จะคิดว่าค่า md5 นั้นถูกต้อง

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

นอกจากนี้คุณจะได้รับข้อความแสดงข้อผิดพลาดเดียวกันหาก md5sum ไม่มีอักขระฐานสิบหก 32 ตัว ในตัวอย่างนี้มีเพียง 31 ตัวอักษร

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

โซลูชั่นสำหรับไฟล์จำนวนมาก

หากคุณมีไฟล์จำนวนมากและต้องการทำให้กระบวนการอัตโนมัติคุณสามารถทำตามขั้นตอนเหล่านี้:

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:~$ 

สร้าง md5sum สำหรับแต่ละไฟล์และบันทึกลงใน md5sum.txt

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

ในการตรวจสอบ md5sum สำหรับไฟล์ทั้งหมดใช้คำสั่งต่อไปนี้

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

นี่คือตัวอย่างถ้าค่า md5sum ไม่ตรงกับไฟล์ ในกรณีนี้ฉันจะแก้ไขfile-bเนื้อหา

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

ดูนี่เป็นข้อความแสดงข้อผิดพลาด หวังว่านี่จะช่วยได้

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:~$ 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.