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

28

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

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Der schwierige Teil 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?

souravc
quelle

Antworten:

39

Zum Beispiel habe ich eine Datei namens test_binary.

MD5 Summe von Dateitest 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 Summenhash. 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 zum Stackoverflow, wo ich die Antwort auf die Frage gefunden habe, warum wir manchmal binaryDateien und textDateien unterscheiden sollten.


c0rp
quelle
3
Ist das Sternchen notwendig?
Jobin
Interessante Frage. Ich benutze immer mit *, aber Wiki sagte, dass es zwei Leerzeichen sein sollte. Ich werde suchen ...
c0rp
@souravc ok, ich fand Informationen über *, wird bald aktualisiert
c0rp
@Jobin Ich füge Informationen über *die Antwort hinzu
c0rp
Das macht Sinn. +1 gegeben
jobin
2

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
Elliott Frisch
quelle
1
Vielen Dank für Ihre Antwort, aber es muss ein anderes Dienstprogramm installiert werden. Gleichzeitig bietet es auch Unterstützung für andere Formate. Es ist gut, davon zu wissen. Aber im gegenwärtigen Kontext werde ich mit der anderen Antwort weitermachen. Sowieso +1 von mir.
Souravc
1

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

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

[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, --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

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

In diesem Fall stimmt der Wert von md5sum nicht überein

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

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

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

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

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

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:

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

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

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

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

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

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

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

Siehe, das ist die Fehlermeldung. Hoffe das hilft.

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:~$ 
Charlotte Russell
quelle