Хорошая стратегия для обеспечения целостности файла - PullRequest
6 голосов
/ 12 января 2010

У меня есть некоторый код, который загружает лист с веб-сервера и сохраняет его в каталоге документов телефона. Меня беспокоит, что если файл испортится, это повлияет на стабильность и удобство работы приложения.

Я защищаюсь от кодирования в частях приложения для чтения данных, но мне было интересно, что посоветуете сначала проверить целостность файла, прежде чем старый будет перезаписан. Я думаю о реализации какого-то вычисленного значения, которое также хранится в качестве ключа, например, в списке.

Буду очень признателен за любые мысли о том, чтобы сделать его максимально надежным.

С наилучшими пожеланиями

Dave

1 Ответ

5 голосов
/ 12 января 2010

Посмотрите на CommonCrypto/CommonDigest.h.

Функция CC_MD5(const void *data, CC_LONG len, unsigned char *md); вычисляет хеш MD5.

@implementation NSData (MD5)

-(NSString*)md5
{
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5([self bytes], [self length], digest);

    NSString* s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                   digest[0], digest[1], 
                   digest[2], digest[3],
                   digest[4], digest[5],
                   digest[6], digest[7],
                   digest[8], digest[9],
                   digest[10], digest[11],
                   digest[12], digest[13],
                   digest[14], digest[15]];
    return s;

}

@end

В рамках развертывания файлов на сервере вы можете использовать OpenSSL для вычисления хэшей. Команда openssl md5 filename вычисляет хеш MD5 для файла. Это может быть интегрировано в скрипт.

Затем, после того как ваше приложение загрузило файл, оно вычисляет хэш того, что было загружено, и сравнивает его с хешем, хранящимся на сервере.

Очевидно, что если вы хотите обеспечить целостность файла plist, этот plist не может содержать свой собственный хэш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...