วิธีเปรียบเทียบส่วนต่าง ๆ ของไฟล์โดยแฮช

sinned 12/06/2018. 7 answers, 2.751 views
bash hashing

ฉันมีไฟล์ที่ดาวน์โหลดสำเร็จหนึ่งไฟล์และไฟล์อื่น ๆ ดาวน์โหลดล้มเหลว (เฉพาะไฟล์ขนาดใหญ่ 100 MB แรก) ซึ่งฉันสงสัยว่าเป็นไฟล์เดียวกัน

ในการตรวจสอบสิ่งนี้ฉันต้องการตรวจสอบแฮชของพวกเขา แต่เนื่องจากฉันมีเพียงบางส่วนของไฟล์ที่ดาวน์โหลดไม่สำเร็จฉันต้องการแฮชเพียงไม่กี่เมกะไบต์แรกหรือมากกว่านั้น

ฉันจะทำสิ่งนี้ได้อย่างไร

ระบบปฏิบัติการจะเป็น windows แต่ฉันได้ติดตั้ง cygwin และ MinGW แล้ว

7 Answers


Konrad Rudolph 12/06/2018.

การสร้างแฮชเพื่อเปรียบเทียบไฟล์นั้นสมเหตุสมผลถ้าคุณเปรียบเทียบไฟล์หนึ่งไฟล์กับไฟล์หลายไฟล์หรือเมื่อเปรียบเทียบไฟล์หลายไฟล์กับอีกไฟล์หนึ่ง

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

เครื่องมือเปรียบเทียบไฟล์ที่มีประสิทธิภาพคือ cmp :

cmp --bytes $((100 * 1024 * 1024)) file1 file2 && echo "File fragments are identical" 

คุณยังสามารถรวมเข้ากับ dd เพื่อเปรียบเทียบส่วนต่าง ๆ (ไม่จำเป็นตั้งแต่ต้น) ของสองไฟล์เช่น:

cmp \
    <(dd if=file1 bs=100M count=1 skip=1 2>/dev/null) \
    <(dd if=file2 bs=100M count=1 skip=1 2>/dev/null) \
&& echo "File fragments are identical" 

davidbaumann 12/06/2018.

ฉันขอโทษฉันไม่สามารถลองได้ แต่วิธีนี้จะได้ผล

dd if=yourfile.zip of=first100mb1.dat bs=100M count=1
dd if=yourotherfile.zip of=first100mb2.dat bs=100M count=1 

นี่จะเป็น 100 เมกะไบต์แรกของทั้งสองไฟล์

ตอนนี้รับแฮช:

sha256sum first100mb1.dat && sha256sum first100mb2.dat 

คุณสามารถเรียกใช้โดยตรง:

dd if=yourfile.zip bs=100M count=1 | sha256sum 
dd if=yourotherfile.zip bs=100M count=1 | sha256sum 

Xen2050 12/06/2018.

คุณสามารถเปรียบเทียบไฟล์โดยตรงกับโปรแกรม binary / hex diff เช่น vbindiff มันเปรียบเทียบไฟล์สูงสุด 4GB บน Linux และ Windows อย่างรวดเร็ว

ดูเหมือนสิ่งนี้มีความแตกต่างที่เน้นเป็นสีแดงเท่านั้น (1B กับ 1C):

one                                       
0000 0000: 30 5C 72 A7 1B 6D FB FC  08 00 00 00 00 00 00 00  0\r..m.. ........  
0000 0010: 00 00 00 00                                       ....
0000 0020:
0000 0030:
0000 0040:
0000 0050:
0000 0060:
0000 0070:
0000 0080: 
0000 0090: 
0000 00A0: 

two        
0000 0000: 30 5C 72 A7 1C 6D FB FC  08 00 00 00 00 00 00 00  0\r..m.. ........  
0000 0010: 00 00 00 00                                       ....               
0000 0020: 
0000 0030:
0000 0040:
0000 0050:
0000 0060:
0000 0070:
0000 0080:
0000 0090:                                
0000 00A0:             
┌──────────────────────────────────────────────────────────────────────────────┐
│Arrow keys move  F find      RET next difference  ESC quit  T move top        │
│C ASCII/EBCDIC   E edit file   G goto position      Q quit  B move bottom     │
└──────────────────────────────────────────────────────────────────────────────┘ 

Tonny 12/07/2018.

ดูเหมือนว่าทุกคนจะไปตามเส้นทาง Unix / Linux ด้วยวิธีนี้ แต่การเปรียบเทียบ 2 ไฟล์สามารถทำได้อย่างง่ายดายด้วยคำสั่งมาตรฐานของ Windows:
FC /B file file2

FC มีอยู่ใน Windows NT ทุกรุ่นที่เคยมีมา และ (ถ้าฉันจำได้ถูกต้อง) ก็มีอยู่ในดอส
มันค่อนข้างช้า แต่ไม่สำคัญว่าจะใช้เพียงครั้งเดียว


Blerg 12/08/2018.

ฉันรู้ว่ามันบอกว่าสำหรับ Bash แต่ OP ก็ระบุว่าพวกเขามี Windows สำหรับทุกคนที่ต้องการ / ต้องการโซลูชัน Windows มีโปรแกรมชื่อ HxD ซึ่งเป็นตัวแก้ไข Hex ที่สามารถเปรียบเทียบสองไฟล์ได้ หากไฟล์มีขนาดแตกต่างกันมันจะบอกว่าชิ้นส่วนที่มีอยู่เหมือนกันหรือไม่ และถ้าจำเป็นก็สามารถเรียกใช้ checksums สำหรับสิ่งที่เลือกไว้ในปัจจุบัน ฟรีและสามารถดาวน์โหลดได้จาก: เว็บไซต์ HxD ฉันไม่มีความเกี่ยวข้องใด ๆ กับผู้แต่งฉันเพิ่งใช้มาหลายปีแล้ว


Jim L. 12/12/2018.

cmp จะบอกคุณเมื่อไฟล์สองไฟล์เหมือนกันจนถึงความยาวของไฟล์ขนาดเล็ก:

$ dd if=/dev/random bs=8192 count=8192 > a
8192+0 records in
8192+0 records out
67108864 bytes transferred in 0.514571 secs (130417197 bytes/sec)
$ cp a b
$ dd if=/dev/random bs=8192 count=8192 >> b 
8192+0 records in
8192+0 records out
67108864 bytes transferred in 0.512228 secs (131013601 bytes/sec)
$ cmp a b
cmp: EOF on a 

cmp กำลังบอกคุณว่าการเปรียบเทียบพบ EOF ในไฟล์ a ก่อนที่จะตรวจพบความแตกต่างระหว่างสองไฟล์


user48918 12/07/2018.

หากคุณสามารถเข้าถึงเชลล์เซสชันของระบบรีโมตจากนั้นคุณสามารถแบ่งซอร์สไฟล์ออกเป็นชิ้น ๆ โดยใช้คำสั่ง split หากต้องการแยกไฟล์ขนาดใหญ่เป็นบิต (ไบนารี่) หนึ่งล้านไบต์หรือน้อยกว่าละ:

split -b 1000000 bigfile.tgz จะสร้างชิ้น xaa และอื่น ๆ จากตรงนั้นมันเป็นเรื่องเล็กน้อยที่จะเชื่อมต่อชิ้นส่วนเพื่อสร้างไฟล์ใหม่:

cat x?? > reconstructed_bigfile.tgz cat x?? > reconstructed_bigfile.tgz แน่นอนว่าคุณสามารถควบคุมชื่อของคอมโพเนนต์ไฟล์ได้ ฉันแค่อธิบายการใช้ค่าเริ่มต้น


HighResolutionMusic.com - Download Hi-Res Songs

1 AJR

Birthday Party flac

AJR. 2019. Writer: Adam Met;Jack Met;Ryan Met;Peter Ivers;David Lynch.
2 Loote

Your Side Of The Bed flac

Loote. 2018. Writer: ​Jesse Saint John;Jackson Foote;Emma Lov Block.
3 AJR

100 Bad Days flac

AJR. 2019. Writer: Jack Met;Adam Met;Ryan Met.
4 Joe Jonas

Longer Than I Thought flac

Joe Jonas. 2018. Writer: Patrick Nissley;Jackson Foote;Dave Katz.
5 Loote

Out Of My Head flac

Loote. 2018. Writer: Emma Lov Block;Michael Pollack;Jeremy Dussolliet;Jackson Foote.
6 Iselin Solheim

Anyone Out There flac

Iselin Solheim. 2019. Writer: Iselin Solheim;Max Grahn.
7 Loote

Wish I Never Met You flac

Loote. 2018. Writer: Jackson Foote;Alex Peter Koste;Jeremy Dussolliet;Emma Lov Block.
8 Kim Petras

Heart To Break flac

Kim Petras. 2018. Writer: Cirkut;Aaron Joseph;Dr. Luke;Jacob Kasher;Kim Petras.
9 A L E X

Out On The Trampoline At Night flac

A L E X. 2018. Writer: A L E X.
10 A L E X

I Want To Hold Your Hand flac

A L E X. 2018. Writer: A L E X.
11 A L E X

Field flac

A L E X. 2018. Writer: A L E X.
12 A L E X

Save Me flac

A L E X. 2018. Writer: A L E X.
13 Devin

Summer Lover flac

Devin. 2019. Writer: Tommy Lee James;Stuart Crichton;Oliver Heldens;Nile Rodgers;Devin Guisande.
14 A L E X

9 To 5 flac

A L E X. 2018. Writer: A L E X.
15 A L E X

Skirt flac

A L E X. 2018. Writer: A L E X.
16 Florian Picasso

Midnight Sun (Extended Version) flac

Florian Picasso. 2019.
17 Florian Picasso

Midnight Sun flac

Florian Picasso. 2019.
18 21 Savage

Enzo flac

21 Savage. 2019. Writer: YungLunchBox;Sheck Wes;Offset;Gucci Mane;21 Savage;DJ Snake.
19 Tales Of Ratatösk

Battle Of The Doomed Gods 320kbps

Tales Of Ratatösk. 2019.
20 Tales Of Ratatösk

Andro 320kbps

Tales Of Ratatösk. 2019.

Related questions

Hot questions

Language

Popular Tags