Comment calculer la somme de contrôle md5 sur l'annuaire avec java ou groovy?
Je suis à la recherche d'utiliser java ou groovy pour obtenir la somme de contrôle md5 d'un répertoire complet.
Je dois copier les répertoires de la source à la cible, de la somme de contrôle de la source et de la cible, et après supprimer les répertoires source.
J'ai trouver ce script pour les fichiers, mais comment faire la même chose avec les annuaires ?
import java.security.MessageDigest
def generateMD5(final file) {
MessageDigest digest = MessageDigest.getInstance("MD5")
file.withInputStream(){ is ->
byte[] buffer = new byte[8192]
int read = 0
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
}
byte[] md5sum = digest.digest()
BigInteger bigInt = new BigInteger(1, md5sum)
return bigInt.toString(16).padLeft(32, '0')
}
Est-il une meilleure approche ?
Vous devez utiliser l'un des
Je trouve FastMD5, vraiment facile de trouver le fichier MD5 : Chaîne de hash = MD5.asHex(MD5.getHash(new File(filename)))); de plus en Plus facile à utiliser et plus Rapide.
org.apache.commons.codec.digest.DigestUtils.md5Hex
méthodes préférence pour le code ci-dessusJe trouve FastMD5, vraiment facile de trouver le fichier MD5 : Chaîne de hash = MD5.asHex(MD5.getHash(new File(filename)))); de plus en Plus facile à utiliser et plus Rapide.
OriginalL'auteur Fabien Barbier | 2010-06-09
Vous devez vous connecter pour publier un commentaire.
J'ai eu la même exigence et choisi mon répertoire de hachage' être un hachage MD5 de la concaténation de flux de tous les (non -) du répertoire des fichiers dans le répertoire. Comme crozin mentionné dans les commentaires sur une question similaire, vous pouvez utiliser
SequenceInputStream
à agir comme un ruisseau de la concaténation d'une charge d'autres flux. Je suis en utilisant Apache Commons Codec pour l'algorithme MD5.Fondamentalement, vous recurse à travers l'arborescence du répertoire, l'ajout de
FileInputStream
des cas, à unVector
pour les non-répertoire de fichiers.Vector
alors facilement a laelements()
d'une méthode à l'Enumeration
queSequenceInputStream
doit parcourir. L'algorithme MD5, cela apparaît comme unInputStream
.Une chasse aux sorcières, c'est que vous avez besoin des fichiers présentés dans le même ordre à chaque fois pour le hachage être le même avec les mêmes entrées. Le
listFiles()
méthode dansFile
ne garantit pas une commande, j'ai donc trier par nom de fichier.Je faisais cela pour SVN contrôlé fichiers, et je voulais éviter le hachage de l'caché fichiers SVN, j'ai donc mis en place un indicateur pour éviter les fichiers cachés.
Pertinentes du code de base est comme ci-dessous. (Évidemment, il pourrait être "blindé".)
Oui, bon point pour le non-portabilité et heureux que vous avez trouvé le bout de code utile. Ce morceau a été rapide et sale code; je dis "Évidemment, il pourrait être "blindé"" : -)
La réponse est génial, mais il manque si les noms de fichiers sont modifiés, en conservant l'ordre alphabétique, de sorte que nous pouvons prendre un plus hachage avec chemin d'accès absolu du fichier.
OriginalL'auteur Stuart Rossiter
J'ai fait une fonction pour calculer la somme de contrôle MD5 sur le Répertoire :
Tout d'abord, je suis en utilisant FastMD5: http://www.twmacinta.com/myjava/fast_md5.php
Voici mon code :
C'est en fait le hachage hash du contenu des fichiers, plutôt que de simplement le hachage du contenu.
OriginalL'auteur Fabien Barbier
HashCopy est une application Java. Il peut générer et vérifier le MD5 et SHA sur un seul fichier ou d'un répertoire de façon récursive. Je ne suis pas sûr si elle a une API. Il peut être téléchargé à partir de http://www.jdxsoftware.org.
OriginalL'auteur William Leng
Basé sur Stuart Rossiter's réponse, mais nettoyer le code et les fichiers cachés correctement traitées:
OriginalL'auteur BullyWiiPlaza
Il n'est pas clair ce que signifie la somme md5 d'un répertoire. Vous voudrez peut-être la somme de contrôle du fichier d'inscription; vous pouvez la somme de contrôle de la liste des fichiers et leur contenu. Si vous êtes déjà en additionnant le fichier de données eux-mêmes, je vous suggère de vous spec une sans ambiguïté de la représentation pour une inscription à l'annuaire (attention pour les mauvais caractères dans les noms de fichiers), puis calculer et de hachage qui à chaque fois. Vous devez également tenir compte de la façon dont vous allez gérer les fichiers spéciaux (sockets, des tuyaux, des appareils et des liens symboliques dans le monde unix; NTFS a des flux de fichier et je crois que quelque chose de semblable à des liens symboliques).
OriginalL'auteur crazyscot