gpt4 book ai didi

ios - 从 Objective-C 对象生成 MD5 哈希

转载 作者:行者123 更新时间:2023-12-01 17:55:10 31 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





MD5 algorithm in Objective-C

(5 个回答)


8年前关闭。




我想为 NSObject 生成一个 MD5 哈希:

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSString * unit;
@property (nonatomic, retain) NSArray * fields;

最好的方法是什么?我已经看到了从字典或数组进行散列的示例,但没有从整个 NSObject 中看到。

最佳答案

要为 NSObject 或 NSObject 的子类生成 MD5 哈希,您需要将其转换为易于哈希但仍代表实例状态的东西。 JSON 字符串就是这样一种选择。代码如下所示:

型号.h

#import <Foundation/Foundation.h>

@interface Model : NSObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSString * unit;
@property (nonatomic, retain) NSArray * fields;

- (NSString *)md5Hash;

@end

型号.m
#import <CommonCrypto/CommonDigest.h>
#import "Model.h"

@implementation Model

- (NSString *)md5Hash
{
// Serialize this Model instance as a JSON string
NSDictionary *map = @{ @"name": self.name, @"type": self.type,
@"unit": self.unit, @"fields": self.fields };

NSError *error = NULL;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:map
options:NSJSONWritingPrettyPrinted
error:&error];
if (error != nil) {
NSLog(@"Serialization Error: %@", error);
return nil;
}

NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

// Now create the MD5 hashs
const char *ptr = [jsonString UTF8String];
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];

CC_MD5(ptr, strlen(ptr), 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;
}

@end

然后,您只需调用 md5Hash 即可轻松检索 MD5 哈希。方法
Model *obj = [Model new];
obj.name = @"...";
obj.type = @"...";
obj.unit = @"...";
obj.fields = @[ ... ];

NSString *hashValue = [obj md5Hash];

关于ios - 从 Objective-C 对象生成 MD5 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305607/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com