MD5 est un algorithme itératif. Vous n'avez pas besoin de calculer une tonne de petits MD5, puis les combiner d'une manière ou d'une autre. Vous venez de lire les petits morceaux du fichier et de les ajouter au résumé alors que vous êtes en train de le faire, vous n'avez donc jamais besoin d'avoir le fichier entier en mémoire à la fois. Voici une implémentation Java.
FileInputStream f = new FileInputStream(new File("bigFile.txt"));
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] buffer = new byte[8192];
int len = 0;
while (-1 != (len = f.read(buffer))) {
digest.update(buffer,0,len);
}
byte[] md5hash = digest.digest();
Et voila. Vous avez le MD5 d'un fichier entier sans jamais avoir le fichier entier en mémoire à la fois.Cela vaut la peine de noter que si, pour une raison ou une autre, vous voulez des hachages MD5 de sous-sections du fichier (cela est parfois utile pour effectuer des contrôles provisoires sur un gros fichier transféré sur une connexion à faible bande passante) les obtenir par clonage l'objet condensé à tout moment, comme si
byte[] interimHash = ((MessageDigest)digest.clone()).digest();
Cela n'affecte pas l'objet digérer réel de sorte que vous pouvez continuer à travailler avec le hachage MD5 global. Il convient également de noter que MD5 est un hachage obsolète à des fins de cryptographie (comme la vérification de l'authenticité d'un fichier d'une source non fiable) et devrait être remplacé par quelque chose de mieux dans la plupart des cas, comme SHA-1. À des fins non cryptographiques, telles que la vérification de l'intégrité des fichiers entre deux sources approuvées, MD5 est toujours adéquat.
Pourquoi voudriez-vous faire cela? – AndiDog
Pour calculer les valeurs MD5 pour les fichiers qui sont trop volumineux pour être placés dans la mémoire – channel72
MD5 ne dispose que d'un état de 128 bits qui suit un segment de fichier de 512 bits pendant le calcul; qui se soucie de la taille du fichier? –