it-swarm.com.de

So automatisieren Sie den Vergleich von md5sum-Hashwerten für eine große Anzahl von Dateien

Ich kann md5sum Hash einer Datei von einem Terminal überprüfen als,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Das Schwierige ist jedoch, den Hash-Wert mit dem exakten zu vergleichen.

Für eine große Anzahl von Dateien ist es schwierig, die ausgegebenen 32 Zeichen mit dem ursprünglichen/exakten Hash-Wert eines Menschen zu vergleichen. Erstens wäre der Job sehr eintönig und es gibt eine große Fehlerquote.

Ist es möglich, den Vergleichsprozess zu automatisieren, vorzugsweise in CLI?

26
souravc

Zum Beispiel habe ich eine Datei namens test_binary.

MD5-Summe des Dateitests ist ef7ab26f9a3b2cbd35aa3e7e69aad86c

So testen Sie es automatisch:

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

oder

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

Zitat von Mann

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

Zitat aus dem Wiki

Hinweis: Zwischen jedem zu vergleichenden Wert für md5sum und dem Dateinamen müssen zwei Leerzeichen stehen. Andernfalls wird der folgende Fehler ausgegeben: "Es wurden keine ordnungsgemäß formatierten MD5-Prüfsummenzeilen gefunden".

Link zum Wiki

Sie können auch nur MD5-Hashes aus der Datei lesen

$ md5sum -c md5sum_formatted_file.txt

Es erwartet Datei mit Format:

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

Über * und <space> nach MD5-Summen-Hash. Es gibt wenig Notiz im Mann:

 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.

Und hier ist der Link zu stackoverflow , wo ich die Antwort auf die Frage gefunden habe, warum wir manchmal binary Dateien und text Dateien unterscheiden sollten.


37
c0rp

Eine Möglichkeit ist das Dienstprogramm cfv

Sudo apt-get install cfv

CFV unterstützt viele Arten von Hashes sowie das Testen und Erstellen von Hash-Dateien.

# 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
2
Elliott Frisch

Ja, für diesen Befehl ist ein Sternchen * erforderlich. Schauen Sie sich dieses Beispiel an.

Dies ist die Binärdatei, und sagen wir, der richtige Wert für md5sum ist exampleofcorrectmd5value00000000 (32 hexadezimales Zeichen).

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

-c, --check

lesen Sie die MD5-Summen aus den DATEIEN und überprüfen Sie sie

Wenn der Wert von md5sum mit der Binärdatei übereinstimmt, erhalten Sie diese Ausgabe

[[email protected] ~]# md5sum -c <<< "exampleofcorrectmd5value00000000" *binary-file.run.tgz"
binary-file.run.tgz: OK
[[email protected] ~]# 

In diesem Fall stimmt der Wert von md5sum nicht überein

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

Ohne Sternchen * wird die folgende Fehlermeldung angezeigt, obwohl der Wert für md5 korrekt ist

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

Die gleiche Fehlermeldung wird auch angezeigt, wenn md5sum keine 32 Hexadezimalzeichen enthält. In diesem Beispiel hat es nur 31 Zeichen.

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

Lösung für viele Dateien

Wenn Sie viele Dateien haben und den Prozess automatisieren möchten, können Sie die folgenden Schritte ausführen:

[email protected]:~$ 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
[email protected]:~$ 

Generiere md5sum für jede Datei und speichere es in md5sum.txt

[email protected]:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1  file-a
1b2297c171a9a450d184871ccf6c9ad4  file-b
7f4d13d9b0b6ac086fd68637067435c5  file-c
[email protected]:~$ 

Verwenden Sie den folgenden Befehl, um md5sum auf alle Dateien zu überprüfen.

[email protected]:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: OK
file-c: OK
[email protected]:~$ 

Dies ist ein Beispiel, wenn der Wert von md5sum nicht mit der Datei übereinstimmt. In diesem Fall ändere ich den Inhalt von file-b

[email protected]:~$ echo "new data" > file-b 
[email protected]:~$ 

Siehe, das ist die Fehlermeldung. Hoffe das hilft.

[email protected]:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: FAILED
file-c: OK
md5sum: WARNING: 1 computed checksum did NOT match
[email protected]:~$ 
1