2011-12-13 156 views
7

我想将短字符串转换为md5哈希,我发现有几篇文章关于它,但没有人工作。 这是我找到的最简单的例子。我有这个错误“隐式函数声明”错误Objective-C

功能CC_MD5的隐含声明是无效的C99

- (NSString *) md5:(NSString *) input 
{ 
const char *cStr = [input UTF8String]; 
unsigned char digest[16]; 
CC_MD5(cStr, strlen(cStr), digest); // This is the md5 call 

NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 

for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
[output appendFormat:@"%02x", digest[i]]; 

return output; 
} 

UPDATE 我添加#进口,它的工作很好,当我调用的方法是这样的:

[self md5:@"admin"]; 

,我得到正确的MD5散列。但是,当我这样做

[self md5:userId]; 

我得到一个错误,

[NSDecimalNumber UTF8字符串]:无法识别的选择发送到实例 0x4d3e280 但用户id是不是小数,他包含Facebook的ID,但它的声明作为的NSString

NSString *userId; 
@property(retain,nonatomic) NSString *userId; 

回答

25

因为没有看到CC_MD5的声明。

包括在你的项目和安全框架

#import <CommonCrypto/CommonDigest.h> 
0

你输入正确的接口定义CC_MD5?

#import "CommonDigest.h" 
+0

我想你可能是指`` – 2011-12-13 23:23:56

+0

它仍然有效。但是如果你想给出完整的位置,那么就像SO的一半提到了 – 2011-12-13 23:26:14

3

您需要包括来自加密库CommonDigest头文件在你的类的顶部,其中MD5函数定义,以及包括安全框架

#import <CommonCrypto/CommonDigest.h>