【发布时间】:2011-11-29 17:39:07
【问题描述】:
我正在尝试通过在 iOS 中使用它们的哈希值重命名它们来创建唯一的文件名。我该怎么做?
【问题讨论】:
标签: iphone ios hash md5 sha256
我正在尝试通过在 iOS 中使用它们的哈希值重命名它们来创建唯一的文件名。我该怎么做?
【问题讨论】:
标签: iphone ios hash md5 sha256
你可以通过扩展 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;
}
请注意,返回的值是自动释放的,可能需要由接收方保留。
希望这会有所帮助。
【讨论】:
您为什么不简单地生成唯一标识符并使用它?喜欢
CFUUIDRef uuidObj = CFUUIDCreate(nil);
NSString *uniqueId = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
NSLog(@"%@",uniqueId);
[uniqueId autorelease];
【讨论】:
使用 NSData 是一个昂贵的选择。如果您随时处理大文件,最好使用 NSFileHandler 扩展。
【讨论】: