2010-11-14 65 views
2

我試圖對我創建的iPhone應用程序使用MD5加密。我創建用下面的代碼的md5.m文件(從StackOverflow的複製):使用在調用MD5函數(Obejctive-C,iPhone)時遇到問題

#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'期待的表達式'」...我沒有錯過什麼?

回答

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"); 
} 
+0

感謝您的答案。我做了#import,但是我的頭文件設置有點不同: - (NSString *)md5Return:(NSString *)str; – tyng 2010-11-14 19:45:00

+0

看到我編輯的帖子。 .h中的方法應該始終與.m文件中的方法匹配。 – 2010-11-14 19:57:54

+0

完全工作!非常感謝 :) – tyng 2010-11-14 20:43:52

1

如果我把你的代碼粘貼到一個簡單的基礎工具中,一切都會編譯和運行。

如果你複製/粘貼你的錯誤,那麼'mad5'表示你拼錯了'md5'。

如果您收到有關表達式的錯誤,可能意味着您的代碼中出現了語法錯誤,並且您在此處粘貼的行只是第一個編譯器能夠將錯誤。

+0

我沒有misspel 'MD5' ,那是一個真正的錯字。感謝第三個建議,我正在尋找更高級的語法錯誤。但是,在我添加md5的東西之前,整個程序運行沒有任何錯誤 – tyng 2010-11-14 19:31:16