2010-11-14 10 views
2

J'ai essayé d'utiliser le cryptage MD5 pour l'application iPhone que je suis en train de créer. J'ai créé un fichier md5.m avec le code suivant (copié à partir StackOverflow):J'ai des problèmes pour appeler la fonction 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]; 
} 

J'ai ensuite essayé d'appeler la fonction (dans un fichier .m différent) en utilisant:

NSString *digest = md5(@"password"); 

Mais pour une raison pour laquelle je continue d'avoir l'erreur "Expression attendue avant 'mad5'" ... Qu'est-ce que je ne me trompe pas?

Répondre

1

Assurez-vous d'avoir placé NSString* md5(NSString *str); dans le fichier d'en-tête correspondant au fichier d'implémentation (.m). En outre, assurez-vous d'importer ce fichier d'en-tête dans la classe qui utilisera cette fonction en utilisant #import TestClass.h.

Cela a été testé:

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

Merci pour la réponse. J'ai fait l'import, mais mon installation de fichier d'en-tête est un peu différente: - (NSString *) md5Return: (NSString *) str; – tyng

+0

Voir mon message édité. La méthode dans le fichier .h doit toujours correspondre à la méthode dans le fichier .m. –

+0

Totalement travaillé! Merci beaucoup :) – tyng

1

Si je prends simplement votre code et le colle dans un simple outil Foundation, tout se compile et s'exécute.

Si vous avez copié/collé votre erreur, 'mad5' signifie que vous avez mal orthographié 'md5'.

Si vous obtenez une erreur concernant l'expression, cela signifie probablement que vous avez une erreur de syntaxe plus haut dans votre code et la ligne que vous collez ici est juste la première sur laquelle le compilateur peut mettre une erreur .

+0

Je n'ai pas MisSpel 'md5' , c'était une faute de frappe. Merci pour la troisième suggestion, je cherche l'erreur de syntaxe plus haut maintenant. Cependant, l'ensemble du programme a couru sans aucune erreur avant d'ajouter les trucs md5 – tyng