Которые хешируют для использования для уникальности файла в Java

Сценарии Powershell могли бы быть полезными также и конечно более гибкими, чем xcopy и другие команды DOS. Можно легко рекурсивно вызвать через подкаталоги, отфильтровать файлы по имени или расширения, обработка особенно некоторые конкретные файлы на основе критериев по Вашему выбору, и т.д. , веб-сайт сообщества Powershell является хорошей начальной точкой.

5
задан C. Ross 23 November 2009 в 21:56
поделиться

4 ответа

я использую хэш SHA1 на основе содержимого. MD5 слабее и быстрее, но на современных процессорах скорость не является проблемой.

Также я должен отметить, что этот отличный ответ от jarnbjo указывает на то, что даже предоставленное хеширование SHA в Java вполне способно превысить 20 МБ / с даже на относительно скромном оборудовании x86. Это будет означать производительность уровня 5-10 миллисекунд на 100 КБ входных данных (в памяти), так что ваша цель менее 10 секунд - это значительная переоценка требуемых усилий. Вероятно, вы будете полностью ограничены скоростью чтения файлов с диска, а не каким-либо алгоритмом хеширования, который вы используете.

Если вам необходимо сильное крипто-хеширование, вы должны указать это в вопрос. Основные моменты из которых можно разделить на следующие (настройте размер буфера по своему усмотрению):

import java.io.*;
import java.security.MessageDigest;

public class Checksum 
{    
    const string Algorithm = "SHA-1"; // or MD5 etc.

    public static byte[] createChecksum(String filename) throws
       Exception
    {
        InputStream fis =  new FileInputStream(filename);
        try
        {
             byte[] buffer = new byte[1024];
             MessageDigest complete = MessageDigest.getInstance("MD5"); 
             int numRead;
             do 
             {
                 numRead = fis.read(buffer);
                 if (numRead > 0) 
                 {
                     complete.update(buffer, 0, numRead);
                 }
             } while (numRead != -1);
             return complete.digest();
         }
         finally
         {
             fis.close();
         }
     }
}
15
ответ дан 18 December 2019 в 07:55
поделиться

вы можете использовать MessageDigest с SHA1 :

    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();
5
ответ дан 18 December 2019 в 07:55
поделиться

вот как я это делаю, Я думаю, это должно работать быстро, проверьте, завершится ли это за 10 секунд

package utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * This class used to compute the hash value of any string  
 */
public class MyHasher {
private static final String ALGORITHM = "MD5";
static MessageDigest md = null;

static{
    try {
        md = MessageDigest.getInstance(ALGORITHM);
    } catch (NoSuchAlgorithmException e) {
        MyLogger.error("Can't find implementation of "+ALGORITHM+" algorithm", e);
    }   
}

/**
 * Compute hash value of any string
 * @param arg the string to compute hash value of.
 * @return the hex hash value as a string.
 */
public static String getHash(String arg) {
    md.update(arg.getBytes());
    byte[] hashValue = md.digest();

    return convertToHex(hashValue);
}
/**
 * Converts byte array to the human readable string of hex'es
 * @param data the byte array to convert
 * @return string representation of the hex'es of the byte array
 */
public static String convertToHex(byte[] data){
    StringBuffer buf = new StringBuffer();
    for(int i=0;i<data.length;i++){
        int halfbyte = (data[i]>>>3)&0x0F;
        int two_halfs = 0;
        do{
            if((0<=halfbyte) && (halfbyte <=9))
                buf.append((char) ('0'+halfbyte));
            else
                buf.append((char) ('a'+(halfbyte-10)));
            halfbyte = data[i] & 0x0F;
        }while(two_halfs++ <1);
    }       
    return buf.toString();
}
}
0
ответ дан 18 December 2019 в 07:55
поделиться

, я использую хэш SHA1 на основе содержимого. MD5 слабее и быстрее, но на современных процессорах скорость не является проблемой.

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: