У меня есть приложения для 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;
}
Я ничего не вижу в вашем коде, чтобы объяснить, почему вы получаете разные результаты. Наиболее вероятным объяснением является то, что ваши данные отличаются от run to run. Даже если вы укажете этот метод на одно имя файла, вы получите разные результаты, если содержимое файла каким-либо образом изменится между прогонами. –
Ваш код выглядит нормально ... Я бы порекомендовал сначала проверить, всегда ли вы читаете то же количество байтов из файла. – Jamie
Okey, спасибо. Я попробую :) – definera