Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.

Wie der Titel schon sagt, hatte ich die Möglichkeit, "die MD5-Prüfsumme einer Datei in Java zu finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation zu erhalten", und ich hatte Mühe, es zu implementieren. Dies ist also ein Memo. Grundsätzlich wird empfohlen, eine externe Bibliothek zu verwenden (´ ・ ω ・ `)

Generieren Sie zunächst die Zieldatei, für die Sie die md5-Prüfsumme verwenden möchten, mit dem folgenden Einzeiler.

seq 5 | while read x; do cat /dev/urandom | tr -cd 'a-zA-Z0-9' | fold -s5 | xargs -n5 | head -n5 > "sample${x}.txt"; done 

Dadurch werden 5 Dateien mit zufällig angeordneten alphanumerischen Zeichen erstellt. Der Inhalt ist wie folgt.

$ find sample*.txt | while read path; do echo "===> ${path} <==="; cat ${path}; done
===> sample1.txt <===
U959b Xxs05 jZ0XH 7Wrew MRmZB
cJlj3 dCEZm qnjbH yy9QM ntuEy
VXKle Se9uc i5UxP mppHQ LnOL2
SNAXl oPGWk JYK7S ovkov JXnJ6
GBlSy frjGp 1wSZ4 Zoiqx ynuaM
===> sample2.txt <===
aSl1p ZNcQt EecBl ie3ox wihqz
svMsD 88Lar BzxXw IfdQT 0QNHI
W3SD4 NQM76 5bZh5 BFhQs G7lmt
LkNq4 cCfMR yOMqX c4AxQ LL7KG
OuOPK GMbH4 IjiGf OFfUK McT3b
===> sample3.txt <===
Eqmhh ioKSo AEMb8 Kdgo8 deFxc
ASilF deSpC 0TIzI ZGM17 OA932
hSGXL LCy8q DDYAC 9hTiF nsDqH
LQRZb k53VV 03NCY RhKjF tVggB
JHmOx wilgw QZov5 StZ2g 9PGjn
===> sample4.txt <===
0Dx9Z 0Md5q w2cUT hp8gq rHIYB
WD6X5 yjyiX DNNyY ZN9Yu IEEkc
P6LnO Zlxwq wSopY Ke4KH oBAWh
3REUX sMPCU 50VYL X14A4 UWuMy
6bttJ 7DuHi i1zxV WlbAS LFANI
===> sample5.txt <===
8wOUf 80uxv zAHmA k9Yml knvKl
o61Cs CREZm APeOv 0wL1w mNIVs
gWELy HtwT4 MWdgT 8VRqs drYhR
6UJvA koZSX qNL9w elNTS CKKne
r2Jop WlMWG 1Qwep 5yvBS 2dtCx

Verwenden Sie dann für die 5 generierten Dateien den Befehl md5sum, um die MD5-Prüfsumme zu finden. Diese sollte folgendermaßen aussehen:

$ md5sum sample*.txt
6777566a705dd85f1f0c2968bfcab2c8  sample1.txt
be520478d070207d07a3335d0ee2e2a4  sample2.txt
4c47ca20b16046a13dbe50869bba368e  sample3.txt
48ca253e12841800cf898ab090a04a0e  sample4.txt
b378511f4b8878c338d602e5376f8426  sample5.txt

Obwohl die Einführung lang geworden ist, lautet der Java-Code für die md5-Prüfsumme des Hauptthemas wie folgt.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;


public class Main {
	public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
		var filenames = List.of(
			"sample1.txt",
			"sample2.txt",
			"sample3.txt",
			"sample4.txt",
			"sample5.txt"
		);
		
		for (var filename : filenames) {
			var md5 = md5sum(Paths.get(filename));
			System.out.printf("%s  %s%n", md5, filename);
		}
	}
	
	public static String md5sum(Path path) throws NoSuchAlgorithmException, IOException {
		var digest = MessageDigest.getInstance("MD5");
		try (var input = new DigestInputStream(Files.newInputStream(path), digest)) {
			while (input.read() != -1) {
				// PASS;
			}
			
			var hash = new StringBuilder();
			for (byte b : digest.digest()) {
				hash.append(String.format("%02x", b));
			}
			return hash.toString();
		} 
	}
}

Wenn Sie dies tun, erhalten Sie eine Ausgabe ähnlich der folgenden: Da es mit dem Ergebnis des Befehls md5sum übereinstimmt, scheint es möglich gewesen zu sein, es korrekt zu erhalten (´ ・ ω ・ `)

6777566a705dd85f1f0c2968bfcab2c8  sample1.txt
be520478d070207d07a3335d0ee2e2a4  sample2.txt
4c47ca20b16046a13dbe50869bba368e  sample3.txt
48ca253e12841800cf898ab090a04a0e  sample4.txt
b378511f4b8878c338d602e5376f8426  sample5.txt

Ebenfalls unbestätigt wird der Teil des obigen Java-Codes, der "var Digest = MessageDigest.getInstance (" MD5 ");" enthält, durch "var Digest = MessageDigest.getInstance (" SHA-1 ");" und "var Digest = MessageDigest.getInstance" ersetzt. Wenn Sie es in ("SHA-256"); `ändern, finden Sie auch die Prüfsummen SHA-1 und SHA-2.

Recommended Posts

Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Konvertieren Sie ein Java-Byte-Array in eine hexadezimale Zeichenfolge
Ich möchte herausfinden, welche Java-Version die JAR-Datei hat, die ich habe
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
So ermitteln Sie die Länge einer Audiodatei mit Java
Holen Sie sich das Ergebnis von POST in Java
So erhalten Sie das aktuelle Datum als Zeichenfolge im Format JJJJMMTT
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich möchte den Wert in Ruby erhalten
Ich möchte eine Liste nur eindeutiger Zeichenfolgen erhalten, indem feste Zeichenfolgen vom Dateinamen ausgeschlossen werden
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Übergeben Sie ein Argument an die Methode und erhalten Sie das Ergebnis der Operation als Rückgabewert
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich habe einen RESAS-API-Client in Java erstellt
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Als ich zu IntelliJ wechselte, gab es einen großen Unterschied in der Codierung der Eigenschaftendatei.
In Java möchte ich mehrere angegebene Zeichen nur von Anfang bis Ende abschneiden.
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich möchte einige Eigenschaften als JSON-Strings in Jackson erhalten!
[Wire Mock] Ich möchte einen Stub / Mock-Server in Java einrichten und E2E-Tests durchführen.
[Java] Ich fühlte mich als Java-Anfänger. "Warum wird das erste Zeichen nur im String-Typ großgeschrieben?" Ich sah mich dem String-Typ gegenüber.
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
[Java] Geben Sie das Ergebnis von ffprobe -show_streams in JSON aus und ordnen Sie es einem Objekt in Jackson zu
[Ruby] Ich möchte nur das ungerade Zeichen in der Zeichenfolge ausgeben
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
Finden Sie das Maximum und Minimum der fünf in Java eingegebenen Zahlen
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]