Domanda

Vorrei utilizzare gravatar nella mia applicazione per iPhone. Esiste un modo per generare un hash MD5 esadecimale in Objective-C per iPhone? L'uso di openssl su iPhone è un gioco da ragazzi.

È stato utile?

Soluzione

Ecco come l'ho fatto prima di rimuoverlo dalla mia app:

#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];
}

È giusto aggiungere che non ho scritto questo da solo. L'ho trovato da qualche parte su Internet ma non ho registrato dove.

Altri suggerimenti

Il codice che ho usato per generare l'hash MD5 necessario è disponibile su my github repository , nella sottocartella CommonCrypto. Ci sono un sacco di routine simili che ti mostreranno come usare CommonCrypto o come formattare stringhe di valori di byte esadecimali, base-64, ecc.

Un modo potenzialmente migliore per generare la stringa sarebbe:

NSMutableString * str = [[NSMutableString alloc] initWithCapacity: 33];
int i;
for ( i = 0; i < 16; i++ )
{
  [str appendFormat: @"%02x", result[i]];
}
NSString * output = [str copy];
[str release];
return ( [output autorelease] );

Se utilizzerai il codice nella risposta sopra, tuttavia, suggerirei personalmente di modificare le% 02X in% 02x e di rinunciare completamente alla chiamata -lowercaseString-- potrebbe anche generare i valori esadecimali in minuscolo per iniziare con.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top