Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.

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

Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
Convertir un tableau d'octets Java en une chaîne hexadécimale
Je veux savoir quelle version de java le fichier jar que j'ai est disponible
Obtenez l'URL publique du fichier privé de Flickr en Java
J'ai essayé de résumer les méthodes de Java String et StringBuilder
Comment obtenir la longueur d'un fichier audio avec Java
Obtenez le résultat de POST en Java
Comment obtenir la date actuelle sous forme de chaîne au format aaaaMMjj
Comment savoir quelle version Java d'un fichier de classe a été compilée
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
Je veux obtenir la valeur en Ruby
Je souhaite obtenir une liste de chaînes de caractères uniques uniquement en excluant les chaînes de caractères fixes du nom de fichier
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Passez un argument à la méthode et recevez le résultat de l'opération comme valeur de retour
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
Je veux trouver un chemin relatif dans une situation où Path est utilisé
J'ai essayé de résumer les bases de kotlin et java
Je veux faire une liste avec kotlin et java!
Je veux appeler une méthode et compter le nombre
Je veux créer une fonction avec kotlin et java!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
Je veux créer un fichier Parquet même en Ruby
J'ai créé un client RESAS-API en Java
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Lorsque je suis passé à IntelliJ, il y avait une grande différence dans l'encodage du fichier de propriétés.
En Java, je souhaite couper plusieurs caractères spécifiés uniquement du début et de la fin.
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Je veux revenir à l'écran précédent avec kotlin et java!
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
Je veux obtenir des propriétés sous forme de chaînes JSON dans Jackson!
[Wire Mock] Je souhaite configurer un serveur stub / simulé en Java et effectuer des tests E2E.
[Java] Je me sentais comme un débutant en java. "Pourquoi le premier caractère est-il en majuscule uniquement dans le type String?" J'ai fait face au type String.
[Java] Je veux effectuer distinctement avec la clé dans l'objet
[Java] Comment convertir du type String en type Path et obtenir le chemin
J'ai créé un outil pour afficher la différence du fichier CSV
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Je veux changer la valeur de l'attribut dans Selenium of Ruby
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Je souhaite télécharger un fichier sur Internet en utilisant Ruby et l'enregistrer localement (avec prudence)
[Java] Affiche le résultat de ffprobe -show_streams dans JSON et mappe-le à un objet dans Jackson
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
Je veux afficher des images avec REST Controller de Java et Spring!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
Comment trouver le nombre total de pages lors de la pagination en Java
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Trouvez le maximum et le minimum des cinq nombres saisis en Java
Je veux ForEach un tableau avec une expression Lambda en Java
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]