7
votes

Quel hachage utiliser pour le dossier unicité dans Java

J'essaie de garder une trace d'un ensemble de fichiers, qui peut avoir le même nom et les métadonnées. J'aimerais utiliser un hachage pour différencier et l'utiliser comme une pièce d'identité unique, mais je ne suis pas sûr de savoir lequel utiliser? Les fichiers sont relativement petits (dans la plage de 100 kb) et j'aimerais pouvoir le hacher en moins de 10 secondes. Quel hachain (qui vient intégré dans Java 1.5) sera la meilleure suite mes besoins?


0 commentaires

4 Réponses :


0
votes

Utiliser un contenu basé sur le contenu SHA1 est ce que j'utilise. MD5 est plus faible et plus rapide mais la vitesse des processeurs modernes n'est pas une préoccupation.


0 commentaires

15
votes

Notez qu'un hachage de ce type sera jamais être unique, avec l'utilisation d'une efficacité d'une très bonne chance de ne jamais avoir une collision.

Si vous n'êtes pas concerné avec la sécurité (c'est-à-dire que quelqu'un tente délibérément de casser votre hachage), il vous suffit de simplement utiliser le hachage de MD5 vous donnera un excellent hachage avec un effort minimal.

Il est probable que vous puissiez faire un hachage de 100 ko bien moins élevé. plus de 10 secondes et, bien que SHA-1 soit toujours théoriquement imparfait, il est d'une résistance plus élevée que MD5.

MessageDIGEST vous procurera une implémentation de.

Voici quelques Exemples de l'utilisation avec des flux .

Je dois aussi noter que thi s Excellente réponse de Jarnbjo indiquerait que même le hachage SHA fourni dans Java est bien capable de dépasser 20 Mo / s, même sur du matériel X86 relativement modeste. Cela impliquerait 5-10 millisecondes performances de niveau sur 100 ko de données d'entrée (en mémoire) afin que votre cible de moins de 10 secondes est un surestimé massif de l'effort impliqué. Il est probable que vous serez tout à fait limité par le tarif que vous pouvez lire les fichiers à partir du disque plutôt que tout algorithme de hachage que vous utilisez.

Si vous avez besoin de STRUT Crypto Haçonner vous devrait l'indiquer dans la question. Même alors Sha de certaines saveurs supérieures à 1 est toujours susceptible d'être votre meilleur choix à moins que vous souhaitiez utiliser une bibliothèque externe comme Castle Bouncy Depuis que vous ne devriez jamais essayer de rouler votre propre crypto si une implémentation bien établie existe.

pour un code d'échantillon raisonnablement efficace, je suggère Ce comment Les points saillants peuvent être distillées dans les éléments suivants (syntonisez la taille de la mémoire tampon comme vous le trouvez): xxx


0 commentaires

5
votes

Vous pouvez utiliser MessageDigest avec SHA1 STRY>:

    MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
    InputStream is = new FileInputStream(aFile);
    int res;

    while ((res = inputStream.read()) != -1) {
        digester.update((byte) res);
    }

    byte[] digest = messageDigest.digest();


1 commentaires

Aucun indice, mais c'est une réponse raisonnable alors voici un +1 à compenser



0
votes

Voici la façon dont je le fais, Je pense que cela devrait fonctionner rapidement, vérifier s'il est terminé en 10 secondes xxx


1 commentaires

J'ajouterais la réserve à cela que forçant l'ensemble du fichier à lire dans la mémoire via une chaîne est susceptible d'être inefficace, nécessite plus de mémoire que nécessaire et avoir des implications si vous souhaitez avoir des octets crus ASCII plutôt que de le forcer à être devenu des caractères larges d'abord (par exemple si vous vouliez que un outil standard externe puisse également être haché)