Как мне создать хеш файла на iOS? - PullRequest
7 голосов
/ 03 октября 2011

Я пытаюсь создать уникальные имена файлов, переименовывая их, используя их хэшированные значения в iOS.Как я могу это сделать?

Ответы [ 3 ]

8 голосов
/ 03 октября 2011

Вы можете добиться этого, расширив NSString. Попробуйте это в вашем .h:

@interface NSString(MD5)

- (NSString *)generateMD5Hash

@end

, а в .m

- (NSString*)generateMD5Hash
{
  const char *string = [self UTF8String];
  unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
  CC_MD5(string, strlen(string), md5Buffer);
  NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
    [output appendFormat:@"%02x",md5Buffer[i]];
  return output;
}

вы можете реализовать это, сделав новыйкласс с именем NSString + MD5 и вставкой приведенного выше кода в соответствующие файлы (.h и .m)

РЕДАКТИРОВАТЬ: не забудьте импортировать

РЕДАКТИРОВАТЬ 2:

И для NSData;

@interface NSData(MD5)

- (NSString *)generateMD5Hash;

@end

ваш .m:

- (NSString *)generateMD5Hash
{
  unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
  CC_MD5(self.bytes, (CC_LONG)self.length, md5Buffer);
  NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
    [output appendFormat:@"%02x",md5Buffer[i]];

  return output;
}

Обратите внимание, что значениевозвращается авто-релиз и может потребоваться сохранить получателем.

Надеюсь, это поможет.

1 голос
/ 03 октября 2011

Почему бы вам просто не генерировать уникальные идентификаторы и не использовать их?как

CFUUIDRef uuidObj = CFUUIDCreate(nil);
NSString *uniqueId = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
NSLog(@"%@",uniqueId);
[uniqueId autorelease];
0 голосов
/ 20 мая 2013

Использование NSData - дорогой выбор. Лучше использовать расширение NSFileHandler, если вы имеете дело с большими файлами в любое время.

...