Приложение для Android загружает данные как файлы с моего сервера.Проверка целостности данных файла между Android и PHP
Я хочу проверить, не было ли изменено содержимое файла во время передачи.
На данный момент я думал об использовании значения CRC32, сгенерированного на сервере, и переданного клиенту Android через безопасное соединение.
Однако значение, генерируемое в PHP, не совпадает с значением, генерируемым на клиенте Android. Вот как я вычисления значения CRC32 в PHP:
$Crc32 = hash_file('crc32b', $output_file);
Вот мое поколение код для Android:
boolean bOk = true;
File fTarget = null;
FileInputStream fis;
CRC32 crc32;
byte[] btData;
int iCount;
int iCrc32;
String strCrc32;
btData = new byte[1024];
crc32 = new CRC32();
try
{
fTarget = new File(DOWNLOAD_TARGET_PATH);
fis = new FileInputStream(fTarget);
while((iCount = fis.read(btData)) != -1)
{
crc32.update(btData, 0, iCount);
}
fis.close();
}
catch(Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
iCrc32 = Integer.reverseBytes((int)crc32.getValue());
strCrc32 = String.format("%08x", iCrc32);
bOk = strCrc32.contentEquals(data.m_strCrc32);
if(!bOk && fTarget != null)
{
// delete the file as it could be dangerous
fTarget.delete();
}
return bOk;
Я перевернутый порядок байтов, как во время отладки, я увидел, что это не так совпадение.
Все отлично работает в сборке отладки, но когда я создаю сборку выпуска, это не сработает.
Каков правильный способ сделать это?
«Все отлично работает в сборке отладки, но когда я создаю сборку выпуска, это не работает». Это не имеет смысла. – greenapps
Что такое $ output_file? Вы отметили, что размер файла равен отправляемому? – greenapps
Мы не можем видеть, как ваш php-скрипт echos $ Crc32. Мы также не видим, как вы его получите и сохраните. Просто поставьте известное предложение в $ output_file, а затем сообщите все значения. Поставьте полный код, чтобы мы могли тестировать и сравнивать. – greenapps