tyng
tyng

Reputation: 33

Having trouble calling the MD5 function (Obejctive-C, iPhone)

I tried to use MD5 encryption for the iPhone app I'm creating. I created an md5.m file with the following code (copied from 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];
}

I then tried to call the function (in a different .m file) using:

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

But for some reason I keep on getting the error "Expected expression before 'mad5'"... What have I don't wrong?

Upvotes: 2

Views: 599

Answers (2)

Evan Mulawski
Evan Mulawski

Reputation: 55354

Make sure you have placed NSString* md5( NSString *str ); in the header file that corresponds to the implementation file (.m). Also, make sure you import that header file into the class that will be using that function using #import TestClass.h.

This has been tested:

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

Upvotes: 1

Chris Parker
Chris Parker

Reputation: 1252

If I just take your code and paste it into a simple Foundation tool, everything compiles and runs.

If you copy/pasted your error, then 'mad5' means you misspelled 'md5'.

If you're getting an error regarding the expression, it probably means you have a syntax error higher up in your code and the line you're pasting here is just the first one the compiler is able to put an error on.

Upvotes: 1

Related Questions