【问题标题】:Having trouble calling the MD5 function (Obejctive-C, iPhone)调用 MD5 函数时遇到问题(Objective-C,iPhone)
【发布时间】:2010-11-15 03:57:20
【问题描述】:

我尝试对我正在创建的 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");

但由于某种原因,我不断收到错误消息“'mad5' 之前的预期表达式”......我没有错吗?

【问题讨论】:

    标签: iphone objective-c cocoa function md5


    【解决方案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");
    }
    

    【讨论】:

    • 感谢您的回答。我做了#import,但是我的头文件设置有点不同: - (NSString *)md5Return: (NSString *) str;
    • 查看我编辑的帖子。 .h 中的方法应始终与 .m 文件中的方法匹配。
    【解决方案2】:

    如果我只是把你的代码粘贴到一个简单的 Foundation 工具中,一切都会编译并运行。

    如果您复制/粘贴了错误,则“mad5”表示您拼错了“md5”。

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

    【讨论】:

    • 我没有拼错'md5',那是一个实际的错字。感谢第三个建议,我现在正在寻找更高层的语法错误。然而,在我添加 md5 内容之前,整个程序运行没有任何错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多