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

后端 未结 3 1491
猫巷女王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.

提交回复
热议问题