How do I create a hash of a file on iOS?

后端 未结 3 1490
猫巷女王i
猫巷女王i 2020-12-16 05:05

I\'m trying to create unique file names by renaming them using their hashed value in iOS. How can I do that?

相关标签:
3条回答
  • 2020-12-16 05:14

    you could achieve this by extending NSString, Try this in your .h:

    @interface NSString(MD5)
    
    - (NSString *)generateMD5Hash
    
    @end
    

    and this in your .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;
    }
    

    you can implement this by making a new class called NSString+MD5, and inserting the code above in the corresponding files (.h and .m)

    EDIT: Do not forget to import

    < CommonCrypto/CommonDigest.h >

    EDIT 2:

    And for NSData;

    @interface NSData(MD5)
    
    - (NSString *)generateMD5Hash;
    
    @end
    

    your .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;
    }
    

    Please note that the value returned is autorelease and might need to be retained by the receiver.

    Hope this helps.

    0 讨论(0)
  • 2020-12-16 05:28

    Why don't you simply generate unique identifiers and use it? like

    CFUUIDRef uuidObj = CFUUIDCreate(nil);
    NSString *uniqueId = (NSString*)CFUUIDCreateString(nil, uuidObj);
    CFRelease(uuidObj);
    NSLog(@"%@",uniqueId);
    [uniqueId autorelease];
    
    0 讨论(0)
  • 2020-12-16 05:34

    Using NSData is an expensive choice. Better use NSFileHandler extension if you are dealing with big files anytime.

    0 讨论(0)
提交回复
热议问题