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