无法调用MD5功能(Objective-C,iPhone)

时间:2010-11-14 19:22:17

标签: iphone objective-c cocoa function md5

我尝试对我正在创建的iPhone应用程序使用MD5加密。我使用以下代码创建了一个md5.m文件(从StackOverflow复制):

#import <CommonCrypto/CommonDigest.h>

NSString* md5( NSString *str ) {
  const char *cStr = [str UTF8String];
  unsigned char result[CC_MD5_DIGEST_LENGTH];

  CC_MD5( cStr, strlen(cStr), result );

  return [[NSString
      stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
      result[0], result[1],
      result[2], result[3],
      result[4], result[5],
      result[6], result[7],
      result[8], result[9],
      result[10], result[11],
      result[12], result[13],
      result[14], result[15]
      ] lowercaseString];
}

然后我尝试使用:

调用该函数(在不同的.m文件中)
NSString *digest = md5(@"password");

但由于某种原因,我继续收到错误“疯狂5之前的预期表达”......我有什么不错?

2 个答案:

答案 0 :(得分:1)

如果我只是将您的代码粘贴到一个简单的Foundation工具中,那么所有内容都会编译并运行。

如果你复制/粘贴了你的错误,那么'mad5'意味着你错误拼写了'md5'。

如果您收到有关表达式的错误,则可能意味着您的代码中的语法错误更高,而您在此处粘贴的行只是编译器能够发错的第一行。

答案 1 :(得分:1)

确保已将NSString* md5( NSString *str );放在与实现文件(.m)对应的头文件中。此外,请确保将该头文件导入到将使用#import TestClass.h

的函数的类中

已经过测试:

TestClass.h

@interface TestClass : NSObject { }

NSString* md5 (NSString* str);

@end

TestClass.m

#import "TestClass.h"
#import <CommonCrypto/CommonDigest.h>

@implementation TestClass

    NSString* md5( NSString *str )
    {
      const char *cStr = [str UTF8String];
      unsigned char result[CC_MD5_DIGEST_LENGTH];

      CC_MD5( cStr, strlen(cStr), result );

      return [[NSString
          stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
          result[0], result[1],
          result[2], result[3],
          result[4], result[5],
          result[6], result[7],
          result[8], result[9],
          result[10], result[11],
          result[12], result[13],
          result[14], result[15]
          ] lowercaseString];
    }

@end

UsingClass.m

-(void)useMD5
{
    NSString *digest = md5(@"password");
}