2015-02-06 1 views
1

У меня есть приложения для Android, которые получают контрольную сумму md5 в zip-файле. Я использую его для сравнения файла с файлом на сервере. Моя проблема в том, что каждый раз, когда я пытаюсь создать md5 для одного и того же файла, контрольная сумма отличается. Я размещаю свои методы здесь. Можете ли вы сказать мне, что не так?Zip File md5 Checksum - Every Time Different

private static String fileMD5(String filePath) throws NoSuchAlgorithmException, IOException { 
     InputStream inputStream = null; 
     try { 
      inputStream = new FileInputStream(filePath); 
      byte[] buffer = new byte[1024]; 
      MessageDigest digest = MessageDigest.getInstance("MD5"); 
      int numRead = 0; 
      while (numRead != -1) { 
       numRead = inputStream.read(buffer); 
       if (numRead > 0) 
        digest.update(buffer, 0, numRead); 
      } 
      byte [] md5Bytes = digest.digest(); 
      return convertHashToString(md5Bytes); 
     } catch (Exception e) { 
      return "ERROR"; 
     } finally { 
      if (inputStream != null) { 
       try { 
        inputStream.close(); 
       } catch (Exception e) { } 
      } 
     } 
    } 

    private static String convertHashToString(byte[] md5Bytes) { 
     String returnVal = ""; 
     for (int i = 0; i < md5Bytes.length; i++) { 
      returnVal += Integer.toString((md5Bytes[i] & 0xff) + 0x100, 16).substring(1); 
     } 
     return returnVal; 
    } 
+0

Я ничего не вижу в вашем коде, чтобы объяснить, почему вы получаете разные результаты. Наиболее вероятным объяснением является то, что ваши данные отличаются от run to run. Даже если вы укажете этот метод на одно имя файла, вы получите разные результаты, если содержимое файла каким-либо образом изменится между прогонами. –

+0

Ваш код выглядит нормально ... Я бы порекомендовал сначала проверить, всегда ли вы читаете то же количество байтов из файла. – Jamie

+0

Okey, спасибо. Я попробую :) – definera

ответ

0

Я пытаюсь решить ту же проблему. Я не знаю, как это решить, но я знаю причину :).

Причина в том, что файл zip содержит как минимум временную информацию о файлах. И это то, что вы меняете md5sum. Каждая запись в zip-файле такая же, но результат изменения информации метаданных для md5.

Возможно, вы уже нашли ответ в другом месте.