如何在iOS上创建文件的哈希?

时间:2011-10-03 07:28:23

标签: iphone ios hash md5 sha256

我正在尝试通过在iOS中使用散列值重命名来创建唯一的文件名。我怎么能这样做?

3 个答案:

答案 0 :(得分:8)

你可以通过扩展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)来实现这一点

编辑:别忘了导入

  

&LT; CommonCrypto / CommonDigest.h&gt;

编辑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 :(得分:1)

为什么不简单地生成唯一标识符并使​​用它?像

CFUUIDRef uuidObj = CFUUIDCreate(nil);
NSString *uniqueId = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
NSLog(@"%@",uniqueId);
[uniqueId autorelease];

答案 2 :(得分:0)

使用NSData是一个昂贵的选择。如果您随时处理大文件,最好使用NSFileHandler扩展。