Comme le titre l'indique, j'ai eu l'occasion de "trouver la somme de contrôle MD5 d'un fichier en Java et d'obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale", et j'ai eu du mal à l'implémenter, c'est donc un mémo. Fondamentalement, il est recommandé d'utiliser une sorte de bibliothèque externe (´ ・ ω ・ `)
Tout d'abord, générez le fichier cible pour lequel vous voulez la somme de contrôle md5 en utilisant le one-liner suivant.
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
Cela crée 5 fichiers avec des caractères alphanumériques disposés au hasard, et le contenu est comme suit.
$ 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
Ensuite, pour les 5 fichiers générés, utilisez la commande md5sum
pour trouver la somme de contrôle MD5, et cela devrait ressembler à ceci:
$ md5sum sample*.txt
6777566a705dd85f1f0c2968bfcab2c8 sample1.txt
be520478d070207d07a3335d0ee2e2a4 sample2.txt
4c47ca20b16046a13dbe50869bba368e sample3.txt
48ca253e12841800cf898ab090a04a0e sample4.txt
b378511f4b8878c338d602e5376f8426 sample5.txt
Bien que l'introduction soit devenue longue, le code Java de la somme de contrôle md5 du sujet principal est le suivant.
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();
}
}
}
Si vous faites cela, vous obtiendrez une sortie similaire à ce qui suit: Puisqu'il correspond au résultat de la commande md5sum
, il semble qu'il était possible de l'obtenir correctement (´ ・ ω ・ `)
6777566a705dd85f1f0c2968bfcab2c8 sample1.txt
be520478d070207d07a3335d0ee2e2a4 sample2.txt
4c47ca20b16046a13dbe50869bba368e sample3.txt
48ca253e12841800cf898ab090a04a0e sample4.txt
b378511f4b8878c338d602e5376f8426 sample5.txt
Également non confirmée, la partie du code Java ci-dessus qui dit var digest = MessageDigest.getInstance (" MD5 "); ʻest remplacée par
var digest = MessageDigest.getInstance (" SHA-1 "); ʻandvar digest = MessageDigest.getInstance. Si vous le changez en ("SHA-256");
, vous pouvez également trouver les sommes de contrôle SHA-1 et SHA-2.
Recommended Posts