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

发布于 2024-12-07 21:07:23 字数 52 浏览 0 评论 0原文

我正在尝试通过使用 iOS 中的哈希值重命名它们来创建唯一的文件名。我怎样才能做到这一点?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

待"谢繁草 2024-12-14 21:07:23

你可以通过扩展 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)中插入上面的代码来实现这一点

编辑:不要忘记导入

< CommonCrypto/CommonDigest.h >

编辑2:

对于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;
}

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

希望这有帮助。

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.

云胡 2024-12-14 21:07:23

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

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

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];
一曲琵琶半遮面シ 2024-12-14 21:07:23

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文