【问题标题】:How do I create a hash of a file on iOS?如何在 iOS 上创建文件的哈希?
【发布时间】:2011-11-29 17:39:07
【问题描述】:

我正在尝试通过在 iOS 中使用它们的哈希值重命名它们来创建唯一的文件名。我该怎么做?

【问题讨论】:

    标签: iphone ios hash md5 sha256


    【解决方案1】:

    你可以通过扩展 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;
    }
    

    请注意,返回的值是自动释放的,可能需要由接收方保留。

    希望这会有所帮助。

    【讨论】:

    • 我会将其更改为使用 NSData,因为这是您在读取文件时得到的。从 NSData 获取 const char 数组很简单。
    • 感谢@August Lilleaas!我实施了这个解决方案,它奏效了。
    【解决方案2】:

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

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

    【讨论】:

    • 您好,感谢您的回答,决定使用上述解决方案。还是谢谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2011-04-20
      • 2013-12-20
      • 1970-01-01
      • 2014-02-27
      • 2017-07-26
      相关资源
      最近更新 更多