2011-12-13 4 views
7

Voglio convertire una stringa breve in hash md5, ho trovato diversi post su di esso ma nessuno ha funzionato. è l'esempio più semplice che ho trovato. ho questo erroreerrore "implicita dichiarazione di funzione" in Objective-C

implicita dichiarazione di funzione CC_MD5 è valida in C99

- (NSString *) md5:(NSString *) input 
{ 
const char *cStr = [input UTF8String]; 
unsigned char digest[16]; 
CC_MD5(cStr, strlen(cStr), digest); // This is the md5 call 

NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 

for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
[output appendFormat:@"%02x", digest[i]]; 

return output; 
} 

UPDATE ho aggiunto # import, funziona bene quando io chiamo il metodo come questo:

[self md5:@"admin"]; 

, ottengo il giusto hash MD5. Ma quando faccio questo

[self md5:userId]; 

ottengo un errore,

[NSDecimalNumber UTF8String]: selettore non riconosciuto inviato ad esempio 0x4d3e280 Ma userId non è decimale, che contiene facebook id, ma è dichiarata come NSString

NSString *userId; 
@property(retain,nonatomic) NSString *userId; 

risposta

25

Perché la dichiarazione di CC_MD5 non è stato visto.

Includere il quadro di sicurezza nel progetto e

#import <CommonCrypto/CommonDigest.h> 
+0

grazie, funziona ma ho un piccolo problema – user567

0

si sta importando l'interfaccia giusta che definisce CC_MD5?

#import "CommonDigest.h" 
+0

Penso che probabilmente dire '' –

+0

funziona ancora però. Ma se vuoi dare l'intera posizione allora, funziona come la metà di SO ha menzionato –

3

È necessario includere il file CommonDigest intestazione dalla libreria Crypto in cima alla vostra classe in cui la funzione MD5 è definita così come includere il Security Framework

#import <CommonCrypto/CommonDigest.h>