Gravatar per Iphone? Come posso generare un hash MD5 esadecimale?
-
20-08-2019 - |
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.
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.