Это правильный способ использования контрольной суммы?

Я работаю над приложением, которое, помимо прочего, загружает изображения из Интернета. Некоторые из моих тестировщиков обнаруживают, что изображения не загружаются. В некоторых случаях загрузка прерывается посередине. Изображение, которое в конечном итоге отображается на экране, выглядит примерно так:

введите здесь описание изображения

Предполагаемое изображение выглядит так:

введите здесь описание изображения

Приложение использует URL-адреса из API. Я хотел бы использовать, скажем, контрольную сумму SHA1, чтобы убедиться, что изображение загружено, например:

  1. Приложение запрашивает информацию об изображении, включая URL-адрес и контрольную сумму.
  2. Приложение пытается загрузить изображение.
  3. Приложение хеширует и сравнивает загруженное изображение с хэшем с сервера.

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


person Moshe    schedule 01.05.2013    source источник


Ответы (1)


Приведенная вами логика верна. В общем случае SHA1 будет использоваться, когда безопасность является проблемой. Вы можете использовать более простой метод для проверки правильности данных. Размер фактически загруженного файла и т. д. Однако представленная вами логика представляет собой более тщательную проверку достоверности данных, полученных с сервера, и если суммы SHA1 проверяются, вы точно гарантируете, что пользователь получил данные что вы отправили.

Я считаю, что протоколы передачи HTTP и FTP гарантируют это для вас. Гарантия означает, что вы будете уведомлены в случае частичной загрузки файла или вернете сообщение об успешном завершении, если файл был получен полностью и точно. Поэтому, если безопасность не является проблемой, проверка SHA1 является излишней. Если это необходимо, вам также потребуется зашифровать этот хеш в схеме типа открытого/закрытого ключа.

person ChrisCM    schedule 01.05.2013
comment
Интересный момент... Безопасность здесь не при чем. Моя основная проблема связана с нестабильностью сети. Я использую системные фреймворки для загрузок, но я изучу обратные вызовы для неудачных загрузок и посмотрю, что у меня получится. - person Moshe; 01.05.2013
comment
Как в этом случае вы могли бы гарантировать, что SHA1 от сервера был получен правильно? :) С каким языком вы имеете дело? - person ChrisCM; 01.05.2013